David Madore's WebLog: Mathematics

Vous êtes sur le blog de David Madore, qui, comme le reste de ce site web, parle de tout et de n'importe quoi (surtout de n'importe quoi, en fait), des maths à la moto et ma vie quotidienne, en passant par les langues, la politique, la philo de comptoir, la géographie, et beaucoup de râleries sur le fait que les ordinateurs ne marchent pas, ainsi que d'occasionnels rappels du fait que je préfère les garçons, et des petites fictions volontairement fragmentaires que je publie sous le nom collectif de fragments littéraires gratuits. • Ce blog eut été bilingue à ses débuts (certaines entrées étaient en anglais, d'autres en français, et quelques unes traduites dans les deux langues) ; il est maintenant presque exclusivement en français, mais je ne m'interdis pas d'écrire en anglais à l'occasion. • Pour naviguer, sachez que les entrées sont listées par ordre chronologique inverse (i.e., celle écrite en dernier est en haut). Certaines de mes entrées sont rangées dans une ou plusieurs « catégories » (indiqués à la fin de l'entrée elle-même), mais ce système de rangement n'est pas très cohérent. Cette page-ci rassemble les entrées de la catégorie Mathématiques : il y a une liste de toutes les catégories à la fin de cette page, et un index de toutes les entrées. Le permalien de chaque entrée est dans la date, et il est aussi rappelé avant et après le texte de l'entrée elle-même.

You are on David Madore's blog which, like the rest of this web site, is about everything and anything (mostly anything, really), from math to motorcycling and my daily life, but also languages, politics, amateur(ish) philosophy, geography, lots of ranting about the fact that computers don't work, occasional reminders of the fact that I prefer men, and some voluntarily fragmentary fictions that I publish under the collective name of gratuitous literary fragments. • This blog used to be bilingual at its beginning (some entries were in English, others in French, and a few translated in both languages); it is now almost exclusively in French, but I'm not ruling out writing English blog entries in the future. • To navigate, note that the entries are listed in reverse chronological order (i.e., the latest written is on top). Some entries are classified into one or more “categories” (indicated at the end of the entry itself), but this organization isn't very coherent. This page lists entries in category Mathematics: there is a list of all categories at the end of this page, and an index of all entries. The permalink of each entry is in its date, and it is also reproduced before and after the text of the entry itself.

[Index of all entries / Index de toutes les entréesLatest entries / Dernières entréesXML (RSS 1.0) • Recent comments / Commentaires récents]

Entries with category Mathematics / Entrées de la catégorie Mathématiques:

↓Entry #2805 [older| permalink|newer] / ↓Entrée #2805 [précédente| permalien|suivante] ↓

(lundi)

Comment ça fait de faire des maths ?

Ce billet s'adresse au grand public et se veut donc compréhensible par tous[#]. Je vais parler de maths, pour une fois il ne s'agit pas de faire de la vulgarisation mathématique[#2] au sens où je ne vais pas expliquer du contenu mathématique, mais plutôt tenter de parler de « ce que ça fait de faire des maths », i.e., essayer de dire un mot sur comment les mathématiciens « pensent » les maths et en quoi consiste notre métier. Et peut-être en profiter pour dissiper quelques malentendus ou quelques idées reçues sur les mathématiciens ou la recherche en mathématiques.

[#] À l'exception de quelques brefs passages essentiellement limités aux notes en bas de paragraphe (où je ferai parfois référence à un concept technique), passages que je pense qu'on n'aura aucune difficulté à identifier et à ignorer si on ne les comprend pas.

[#2] Ni même de la méta-vulgarisation comme j'ai pu le faire ici, mais ça va rejoindre un peu certaines choses que je raconte dans ce billet.

Il va de soi que ce but est trop ambitieux pour que je puisse le mener avec succès. D'abord parce que tenter de parler de comment on fait des maths sans parler de maths revient, forcément, à brasser de l'air en agitant les mains. Ensuite, parce qu'il n'y a pas vraiment de pratique « typique » du métier de mathématicien (comme il n'y a pas de pratique « typique » de celui d'écrivain), donc je peux au mieux parler de la mienne (donc celle d'un mathématicien possiblement médiocre) en essayant de faire remarquer ce que je crois être plus ou moins partagé par mes collègues. Enfin, parce que j'avais de toute façon trop de choses à dire et que j'ai arrêté un peu quand j'en avais marre d'écrire, donc je relègue plein de choses (sur la communauté mathématicienne, notamment) à un éventuel billet ultérieur.

(Plan :)

☞ Quelques idées reçues

Peut-être que je devrais commencer par dissiper des idées reçues courantes[#3] sur les mathématiciens ou les mathématiques, même si j'imagine que le lectorat de ce blog, quand bien même il n'est pas lui-même scientifique, a au moins des idées un peu moins approximatives que le grand public moyen à ce sujet.

[#3] Enfin, des idées reçues que je crois que le grand public a sur les mathématiciens. Parce que, honnêtement, je ne suis pas le mieux informé à ce sujet (même si j'ai pu en discuter de temps en temps avec des gens croisés au hasard — un chauffeur de taxi, un coiffeur, un moniteur d'auto-école, un médecin, un voisin dans le RER, etc. ; et bien sûr je vois l'image que toutes sortes de fictions donnent du mathématicien, qui doivent bien refléter une forme d'imaginaire collectif, au moins tel qu'il se manifeste dans l'esprit des écrivains ou scénaristes). Mais il n'est pas exclu que j'aie des idées reçues au sujet des idées reçues des gens sur les mathématiciens.

D'abord, je soupçonne que l'idée reçue la plus courante au sujet de notre métier est que nous faisons des calculs très difficiles, et que nous passons notre temps à écrire des formules très compliqués. Or la plupart des mathématiciens ne font pas des calculs[#4]. Il peut certes tout à fait arriver qu'il y ait des calculs, même des calculs compliqués, en mathématiques : selon les branches des maths, c'est plus ou moins fréquent (même si tout dépend de ce qu'on appelle, exactement, un calcul), mais ce n'est généralement pas l'activité principale. On ne peut pas non plus dire que le mathématicien ait particulièrement souvent affaire à des nombres, ni, en fait, à des formules (pour une acception assez large de formule, on peut convenir qu'il y en a beaucoup, mais même là, on aurait tort de s'imaginer le chercheur en mathématiques comme une sorte de chercheur de formules, comme je soupçonne que beaucoup de gens se l'imaginent).

[#4] S'il y a des scientifiques qui font des calculs compliqués, c'est plutôt les physiciens (même si, là aussi, c'est un cliché, qui a forcément ses limites, il est sans doute plus juste à propos des physiciens que des mathématiciens).

Ajout () : J'aurais sans doute dû mentionner ceci quelque part dans ce billet, et je ne sais pas bien où l'ajouter, alors on va le mettre ici : les maths que la plupart des non-mathématiciens rencontrent dans leurs études (disons au moins jusqu'au baccalauréat, et même un peu après) n'ont qu'un rapport assez distant avec la recherche en mathématiques. Ce sont des maths qui eurent été fraîches il y a environ 150 ans, mais qui ne le sont plus du tout (ce qui ne veut pas dire qu'elles ne soient pas correctes, bien sûr), et surtout, ce sont des maths globalement ternes et inintéressantes (même par rapport à ce qui se faisait à l'époque). Pour faire une comparaison un peu gratuite, disons que si on a fait des maths jusqu'au lycée, on a rencontré quelque chose qui est à la recherche mathématiques un peu comme si l'enseignement de l'histoire se limitait à apprendre par cœur la liste des rois de France et leurs dates : ce ne sont pas des informations fausses, mais ce n'est vraiment pas très intéressant. Il n'est pas surprenant, dans ces conditions, que des gens en retirent l'impression que les maths sont un sujet profondément ennuyeux se limitant à peu près à faire des calculs pénibles sur des situations sans intérêt, qu'ils n'arrivent pas à comprendre qu'il puisse y avoir de la beauté dedans, qu'ils se fassent une image tout à fait fausse du métier de mathématicien, ou même qu'ils pensent qu'il n'y a plus de recherche sur le sujet. (D'un autre côté, je ne sais vraiment pas comment on pourrait présenter les maths autrement au niveau lycée. L'expérience des « maths modernes » en a échaudé plus d'un ; voir aussi la note #41 plus bas à ce sujet.)

Pour le reste, je dois mentionner que je ne crois pas que les mathématiciens soient particulièrement distraits, particulièrement asociaux[#5], ou particulièrement intelligents[#6] : je ne sais même pas si ce sont des choses que les gens s'imaginent vraiment, mais c'est certainement ainsi que nous avons tendance à être présentés dans les rares films où apparaît un mathématicien.

[#5] Le cliché du mathématicien dans les films ou séries télé (et, pour le coup, j'espère quand même qu'il n'est pas si répandu dans la tête des gens), c'est quelqu'un de froid, déconnecté de la réalité, presque dénué d'émotions et d'empathie (comme s'il voyait le monde comme une série de chiffres), et d'ailleurs généralement privé de sens de l'humour. (En fait, ce sont largement les mêmes clichés que ceux qui concernent les personnes autistes, donc on peut aussi ajouter le cliché de la proximité entre ces deux catégories.) Tout ça est juste complètement con. Le manque de sens de l'humour est même particulièrement faux, les mathématiciens sont plutôt farceurs, au contraire. (Et amateurs de canulars, cf. par exemple ceci.) Ce qui est peut-être vrai, en revanche, mais je ne sais pas si c'est un cliché que les gens ont, c'est que beaucoup de mathématiciens sont mauvais en calcul mental. Disons qu'il y a trois types de mathématiciens : ceux qui savent compter, et ceux qui ne savent pas.

[#6] Il faut que j'écrive un billet sur ce que je pense au sujet de l'intelligence, mais en attendant je peux renvoyer à celui-ci qui en parle un peu. Il y a énormément de formes différentes d'intelligence, c'est un terme qui veut tout et rien dire, et si les mathématiciens sont, forcément, doués pour les raisonnements mathématiques et ce qui s'y approche (détecter les erreurs de logique, par exemple), ce qu'on peut considérer comme une forme particulière d'intelligence, il serait à la fois faux et prétentieux (et, en fait, dénué de sens) d'affirmer que nous sommes plus intelligents en général.

Ce qui est sans doute plus vrai (même si ça reste, évidemment, extrêmement simplifié), c'est que les mathématiciens ont tendance à être assez précis et pointilleux, par exemple, dans le choix des termes avec lesquels ils s'expriment (et souvent ça déteint sur d'autres choses, comme la typographie) : parce que dans un énoncé mathématique, on ne peut pas se permettre d'approximation sur ce qu'on dit, et cette habitude de ne pas dire une chose pour une autre va facilement déteindre sur l'ensemble de ce qu'on dit. (À titre d'exemple, j'avais fait remarquer que quelqu'un qui prétendait discuter de politique et de démocratie semblait confondre les affirmations toute décision devrait être approuvée par une majorité de citoyens et tout citoyen devrait approuver une majorité de décisions : c'est exactement le genre de distinction, et aussi d'ailleurs le pli de discuter l'une ou l'autre dans l'abstrait et sans prendre position sur sa véracité, qui est typique du raisonnement mathématique et essentiel pour lui, et qui déteint facilement quand on parle d'autres domaines.)

☞ L'abstraction et la généralité

Si les maths ne sont pas la science des nombres ni celle des formules, j'aurais tendance à dire que c'est celle du raisonnement précis sur les structures abstraites, mais il faut admettre que cette définition est exaspérément vague et pourrait ressembler à une définition de la philosophie. Je n'ai pas vraiment mieux (cf. aussi ce billet où j'essayais de définir l'informatique, et son intersection avec les maths). Mais ce n'est pas vraiment mon but ici de discuter de la question de ce que sont les maths sub specia æternitatis : je veux juste dire que la pratique des maths par les mathématiciens se caractérise surtout par des raisonnements plus que par des calculs, et que ces raisonnements portent plutôt sur des abstractions (plus ou moins reculées par rapport à une situation concrète) que sur des quantités.

Pour ce qui est des abstractions, je pense qu'une bonne explication[#7] à fournir au grand public est la suivante : un mathématicien est quelqu'un qui pense que l'abstraction, au lieu de compliquer les problèmes, les simplifie, car elle consiste justement à ne garder que l'essentiel du problème en jetant tout ce qui est une circonstance particulière distrayante. Le mathématicien cherche typiquement à détacher un problème ou raisonnement des particularités de telle ou telle instance spécifique, pour retrouver sa forme la plus abstraite et universellement applicable.

[#7] Je vole cette remarque à Nalini Anantharaman dans cette vidéo, qui est d'ailleurs intéressante en rapport avec le sujet de ce billet. Mais je la développe ici à ma sauce, donc je ne prétends pas que Nalini Anantharaman sera forcément d'accord avec ce que j'écris.

C'est la raison pour laquelle nous avons un tropisme à la généralisation : même si l'instance spécifique qui a donné naissance à une question de maths comporte un paramètre qui a une valeur numérique précise, le mathématicien va typiquement chercher à savoir si cette valeur est vraiment importante — et, si elle ne l'est pas, généraliser le problème à tout n pour éviter de se laisser distraire par le n particulier qui n'a pas d'importance — tandis que si la valeur est importante (et bien sûr parfois elle l'est) on cherchera à savoir ce qui fait qu'elle l'est,

Par exemple, si je pose le problème de la tablette de chocolat (que je vais énoncer plus bas) en évoquant une tablette de chocolat 3×5, c'est peut-être plus parlant pour le grand public que si j'évoque une tablette de chocolat m×n, mais pour le mathématicien, le problème avec la tablette de chocolat m×n est à la fois plus général et plus simple, parce qu'il nous dit que ce n'est pas la peine de chercher des particularités des nombres 3 et 5 qui feraient marcher le problème dans ce cas et dans ce cas seulement.

Bien sûr, tout le monde n'a pas le même amour pour la généralité pour elle-même : car de la même manière qu'on peut remplacer un entier particulier (comme 42) par l'abstraction un entier quelconque (et lui donner un nom de variable, n), on peut aussi chercher à généraliser plus loin, et remplacer l'hypothèse entier (i.e., élément de ℤ) par quelque chose de plus général (remplacer ℤ par, disons, un anneau commutatif) et se demander si la question a encore un sens, et le cas échéant admet la même réponse. On peut toujours généraliser plus loin, et il faut bien décider un jour de s'arrêter : certains trouvent plaisir à généraliser autant qu'ils peuvent, d'autres s'arrêtent dès qu'ils estiment avoir retiré ce qui est purement superflu, et il serait faux de dire que les mathématiciens recherchent systématiquement l'abstraction maximale. Il y a une branche des mathématiques qui s'attache plus que toute autre aux généralisations, et qu'on pourrait presque qualifier de spécialiste de l'abstraction pour le plaisir de l'abstraction, qui est un peu au reste des mathématiques ce que les mathématiques sont à des problèmes concrets : il s'agit de la théorie des catégories[#8] ; mais tout le monde n'aime pas forcément cette approche consistant à trouver la version la plus abstraite et générale possible de n'importe quel énoncé. Au moins pour la pédagogie, les mathématiciens peuvent aimer énoncer un résultat dans un cas particulier, pour dire ensuite en fait, ceci se généralise de la façon suivante plutôt que de commencer par la version la plus générale.

[#8] Pour caricaturer un peu, disons que si le mathématicien va avoir tendance à remplacer 42 dans un problème par n, où n est un entier, et l'algébriste l'ensemble ℤ des entiers par un anneau commutatif A quelconque, le théoricien des catégories va, à son tour, remplacer la catégorie des anneaux commutatifs par une catégorie d'algèbres sur une monade, puis la 2-catégorie des catégories par une 2-catégorie vérifiant ceci ou cela, bref, on n'en finit jamais de généraliser. De même qu'il y a une blague standard sur les jésuites selon laquelle quand on a fini de leur poser une question on ne comprend plus la question qu'on a posée, il y a son équivalent avec les théoriciens des catégories au sein des mathématiques (ils vont vous expliquer que votre problème consiste à définir une structure d'∞-groupoïde enrichi cocomplet sur certaines computades globulaires, et quand vous cherchez à comprendre n'importe lequel de ces mots vous vous rendez compte qu'il est défini par le nLab au moyen de 12 autres mots que vous ne comprenez pas non plus).

Il y aurait sans doute lieu ici de faire une distinction entre maths pures et maths appliquées, même si je pense que cette distinction n'est pas aussi pertinente qu'on veut bien le faire croire[#9] (et certainement c'est une frontière floue, qui souffre d'ailleurs d'être discrétisée par la gestion administrative des sections du Conseil National des Universités) : pour simplifier à outrance, le mathématicien appliqué apprécie l'abstraction en ce qu'elle aide à résoudre un problème en le débarrassant de ce qui est superflu, tandis que le mathématicien pur apprécie l'abstraction en ce qu'il aide à dégager un concept plus général et plus élégant. Mais dans les deux cas, on aime ne pas se compliquer de détails sans pertinence.

[#9] Je pense que la majorité des mathématiciens sont convaincus de la profonde unité des mathématiques (ou, comme le disent certains pour insister sur cette unité, de la mathématique comme on peut dire de la physique), les mathématiques pures et appliquées n'étant que des tendances au sein d'un tout fondamentalement uni. Je vais revenir plus loin sur cette unité.

☞ La beauté des mathématiques

Je pense qu'une chose sur laquelle quasiment tous les mathématiciens seront d'accord, c'est que les mathématiques ont une très grande beauté interne. C'est quelque chose qu'il est difficile de faire comprendre au grand public, et qui est à la fois une motivation et un défi pour la vulgarisation (cf. ici) : même si on peut parfois en tirer certaines jolies images visibles avec les yeux (comme ici ou ou ou encore pour certaines que j'ai moi-même mis sur YouTube), l'essentiel de la beauté des mathématiques n'est perceptible que par l'intellect, et l'essentiel des objets mathématiques n'admettent aucune sorte d'image qu'on puisse représenter sous forme graphique. Donc parler au grand public de la beauté des mathématiques, comme j'aime bien le dire, c'est un peu comme vivre dans un monde où tout le monde est sourd et d'essayer d'expliquer la beauté d'une symphonie de Beethoven alors que personne ne l'a jamais entendue jouer, on ne peut qu'en lire la partition.

Pour ce qui est de la recherche, cette beauté des mathématiques est à la fois une motivation et un fil conducteur. C'est une motivation, parce que je pense que tous les mathématiciens ont, à un certain niveau, le plaisir de faire des mathématiques parce que c'est beau[#9b] et c'est satisfaisant pour l'esprit (je ne prétends pas que ce soit la seule, ni même la plus importante pour tout le monde, mais elle doit être au moins un élément important chez quasiment tous les mathématiciens professionnels, peut-être même plus que la curiosité commune à tous les scientifiques). Beaucoup de mathématiciens (« purs » comme « appliqués ») trouveront un problème intéressant et « naturel » en ce qu'il éveille leur sens esthétique. Mais c'est aussi un fil conducteur dans la recherche, en ce sens que les constructions et les techniques de démonstrations les plus puissantes sont souvent, quoique pas toujours (et ça dépend fortement des domaines), les plus élégantes : du coup, on peut, dans une certaine mesure, se laisser guider dans ses recherches par son sens de l'esthétique.

[#9b] Ajout () : Pour illustrer le fait que ce n'est pas que moi qui pense ça, Hermann Weyl a dit quelque chose comme ceci : dans mon travail, j'ai toujours tenté d'unifier le beau et le vrai ; mais quand j'ai dû choisir entre les deux, j'ai généralement choisi le beau. Et G. H. Hardy écrit dans A Mathematician's Apology : The mathematician's patterns, like the painter's or the poet's must be beautiful; the ideas like the colours or the words, must fit together in a harmonious way. Beauty is the first test: there is no permanent place in the world for ugly mathematics.

↑Entry #2805 [older| permalink|newer] / ↑Entrée #2805 [précédente| permalien|suivante] ↑

↓Entry #2804 [older| permalink|newer] / ↓Entrée #2804 [précédente| permalien|suivante] ↓

(vendredi)

Le Docteur No fait deviner des nombres

Le Docteur No, célèbre[#] pour capturer des mathématiciens et les soumettre à diverses énigmes (précédemment sur ce blog : ici, , , , et peut-être ) est de retour ! Cette fois-ci il n'a capturé que deux mathématiciens, que nous allons appeler Alice et Bob, mais cela ne l'empêche pas de s'amuser à leur proposer une énigme particulièrement cruelle.

[#] Honnêtement, je ne me rappelle même plus si c'est moi qui ai commencé à appeler Docteur No (comme dans le film de James Bond) le grand méchant de ces énigmes ou si je tiens ça d'ailleurs.

Comme ça fait longtemps que nous n'avons pas eu affaire au Docteur No, je commence par une version jouet de l'énigme, histoire de s'échauffer :

Énigme facile : Le Docteur No a capturé deux mathématiciens, Alice et Bob. Après avoir permis à ceux-ci de se concerter sur leur stratégie, il va les soumettre à son épreuve dont il leur communique les termes. Il communiquera deux entiers naturels de son choix à Alice. Alice choisira un et un seul de ces nombres et ce nombre sera transmis à Bob (qui est l'allié d'Alice). Le but de Bob est de deviner le nombre qu'il n'aura pas reçu : pour ça, il aura droit de proposer un nombre fini quelconque d'essais ; autrement dit, il doit proposer au Docteur No un ensemble fini d'entiers naturels (on peut supposer, cela ne change rien, que le nombre transmis par Alice est aussi mis dedans). Si les nombres initialement choisis par le Docteur No sont dans cet ensemble proposé par Bob, alors les mathématiciens seront libérés ; dans le cas contraire, le Docteur No les tuera avec des tortures particulièrement raffinées.

Comment Alice et Bob font-ils pour être certains d'être libérés ?

La réponse est facile, mais je recommande de prendre le temps de résoudre ce problème avant de passer à la suite (cliquez ici pour la faire apparaître), ne serait-ce que pour vérifier qu'on a bien compris la nature du problème. La réponse est la suivante :

Il va de soi que cette solution fonctionne encore si, au lieu que les nombres proposés par le Docteur No soient des entiers naturels, ce sont des entiers relatifs ou des rationnels, car il suffit de coder ceux-ci par des entiers naturels (mais attention, dans la construction ci-dessus, on n'utilisera plus le plus grand nombre, mais le nombre ayant le plus grand code). Mais qu'en est-il pour des nombres réels ?

Contre-énigme : Le Docteur No a capturé deux mathématiciens, Alice et Bob. Il envisage de les soumettre à l'épreuve suivante. Après leur avoir permis de se concerter sur leur stratégie, il communiquerait deux réels de son choix à Alice. Alice devrait choisir un et un seul de ces nombres et ce nombre serait transmis à Bob (qui est l'allié d'Alice). Le but de Bob serait de deviner le nombre qu'il n'aura pas reçu : pour ça, il aurait droit de proposer un nombre fini quelconque d'essais ; autrement dit, il devrait proposer au Docteur No un ensemble fini de réels (on peut supposer, cela ne change rien, que le nombre transmis par Alice est aussi mis dedans). Si les nombres initialement choisis par le Docteur No sont dans cet ensemble proposé par Bob, alors les mathématiciens seraient libérés ; dans le cas contraire, le Docteur No les tuerait avec des tortures particulièrement raffinées.

Pourquoi le Docteur No, dont le code de l'honneur exige qu'il y ait toujours un moyen de résoudre les épreuves qu'il propose, décide-t-il de ne pas proposer cette épreuve ?

C'est que l'épreuve en question serait impossible : cliquez ici pour voir la preuve.

Le Docteur No doit donc rendre son énigme un peu plus facile. Voici comment il envisage de le faire :

Énigme sur les réels : Le Docteur No a capturé deux mathématiciens, Alice et Bob. Il envisage de les soumettre à l'épreuve suivante. Après leur avoir permis de se concerter sur leur stratégie, il communiquerait trois réels de son choix à Alice. Alice devrait choisir deux de ces nombres et ces nombres seraient transmis (dans un ordre non spécifié) à Bob (qui est l'allié d'Alice). Le but de Bob serait de deviner le nombre qu'il n'aura pas reçu : pour ça, il aurait droit de proposer un nombre fini quelconque d'essais ; autrement dit, il devrait proposer au Docteur No un ensemble fini de réels (on peut supposer, cela ne change rien, que les nombres transmis par Alice sont aussi mis dedans). Si les nombres initialement choisis par le Docteur No sont dans cet ensemble proposé par Bob, alors les mathématiciens seraient libérés ; dans le cas contraire, le Docteur No les tuerait avec des tortures particulièrement raffinées.

Le Docteur No est perplexe quant à la difficulté de cette épreuve et demande conseil à Georg Cantor (qui est emprisonné dans son donjon). Que lui répond Cantor ?

↑Entry #2804 [older| permalink|newer] / ↑Entrée #2804 [précédente| permalien|suivante] ↑

↓Entry #2798 [older| permalink|newer] / ↓Entrée #2798 [précédente| permalien|suivante] ↓

(vendredi)

Introduction aux mathématiques constructives : 2. entiers naturels et principes d'omniscience

Je continue ma série d'introduction aux mathématiques constructives en parlant d'entiers naturels, de suites et de « principes d'omniscience ». Ce billet est la continuation de celui-ci, qu'il n'est pas forcément nécessaire d'avoir intégralement lu mais auquel je renvoie au moins pour l'avant-propos expliquant de quoi il est question (je renvoie aussi à ce billet plus ancien pour une explication générale et historique à ce que sont les maths constructives).

Table des matières

L'ensemble ℕ des entiers naturels, et diverses formes de récurrence

Comme en maths classiques, il y a plusieurs approches fondationnelles pour faire apparaître l'ensemble des entiers naturels, mais il faut forcément postuler quelque chose (au moins l'existence d'une sorte d'ensemble infini) ; si on aime le point de vue ensembliste, pourra identifier, comme proposé par von Neumann, 0 avec ∅, 1 avec {0}={∅}, 2 avec {0,1}={∅,{∅}}, 3 avec {0,1,2}, etc., mais il est sans doute préférable de traiter les entiers naturels comme « atomiques » : je n'ai pas envie de rentrer dans ces considérations-là. Toujours est-il que, d'une manière ou d'une autre, on va vouloir postuler ou démontrer que :

Il existe un ensemble noté ℕ et appelé ensemble des entiers naturels, muni d'un élément 0∈ℕ (appelé zéro) et d'une fonction S:ℕ→ℕ (la fonction successeur), vérifiant le principe de récurrence :

‣ Si E est un ensemble quelconque, eE un élément et f:EE une fonction, alors il existe une unique u:ℕ→E telle que u(0) = e et uS = fu (c'est-à-dire u(S(n)) = f(u(n)) pour tout n∈ℕ).

On dit alors que u est construite par récurrence par itération de f à partir de la valeur initiale e. (Concrètement, u(0)=e, u(1)=f(e), u(2)=f(f(e)) et ainsi de suite.)

Comme en maths classiques, il existe toutes sortes de variations autour de ce principe de récurrence. Celui que je viens d'énoncer est un principe de récurrence « catégorique » ou « universel » (parce qu'on peut le décrire de façon savante en théorie des catégories) ; mais on peut en déduire d'autres principes peut-être plus familiers, comme les suivants (ce que je raconte ci-dessous n'est pas spécialement liée aux maths constructives, mais comme je me suis un peu gratté la tête pour retrouver comment les obtenir, autant prendre la peine d'écrire ces preuves explicitement) :

  • Récurrence avec paramètre : si E est un ensemble quelconque, eE un élément et g:ℕ×EE une fonction, alors il existe une unique u:ℕ→E telle que u(0) = e et u(S(n)) = g(n,u(n)) pour tout n∈ℕ.

    Autrement dit, dans une définition par récurrence, on a le droit d'utiliser l'indice n du terme défini et pas juste la valeur du terme précédent.

    (Pour le démontrer à partir du principe de récurrence tel que je l'ai énoncé plus haut, il suffit d'appliquer ce dernier à l'ensemble ℕ×E avec la valeur initiale (0,e) et f(n,v) = (S(n),g(n,v)) : la première coordonnée du U:ℕ→ℕ×E ainsi obtenu est forcément l'identité d'après l'unicité dans le principe de récurrence sans paramètres, et la condition sur la seconde coordonnée est exactement la condition de la récurrence avec paramètre. ∎)

  • Récurrence sur les propriétés : si P⊆ℕ est une partie de ℕ telle que 0∈P et ∀n∈ℕ.(nPS(n)∈P), alors en fait P=ℕ.

    Autrement dit, si une propriété est vraie en 0 et est vraie en S(n) à chaque fois qu'elle est vraie en n, alors elle est vraie en tout n∈ℕ.

    Démonstration à partir des points précédents : Déjà, on peut déjà remplacer P⊆ℕ par sa fonction indicatrice p:ℕ→Ω, qui vérifie du coup p(0)=⊤ et ∀n∈ℕ.(p(n) ⇒ p(S(n))), et le but est de montrer que p vaut constamment ⊤.

    Si à la place de ∀n∈ℕ.(p(n) ⇒ p(S(n))) on avait fait l'hypothèse ∀n∈ℕ.(p(n) ⇔ p(S(n))), c'est-à-dire ∀n∈ℕ.(p(S(n))=p(n)) ce serait facile puisque c'est une relation de récurrence sur la fonction p qui est aussi vérifiée par la fonction constamment égale à ⊤, donc l'unicité dans le principe de récurrence, appliqué à E=Ω, e=⊤ et f=idΩ montre que p(n)=⊤ pour tout n.

    Mais comme on a seulement fait l'hypothèse ∀n∈ℕ.(p(n) ⇒ p(S(n))), il faut s'y ramener. Voici une possibilité (il y a peut-être plus simple, je ne sais pas) : on définit q:ℕ→Ω par récurrence par q(0)=⊤ et q(S(n)) = p(n)∧q(n) (ceci utilise la récurrence avec paramètre : E=Ω, e=⊤ et g(n,v) = p(n)∧v dans la notation du point précédent), et on définit aussi r(n) = p(n)∧q(n). Alors r(n) = p(n)∧q(n) = q(S(n)) par définition, et comme p(n) implique p(S(n)) (c'est notre hypothèse), on voit que r(n) implique p(S(n))∧q(S(n)), c'est-à-dire précisément r(S(n)) ; or réciproquement, r(S(n)) signifie p(S(n))∧q(S(n)), ce qui implique notamment q(S(n)), qui est égal à r(n) ; bref, on a montré ∀n∈ℕ.(r(n) ⇔ r(S(n))). Par ce qui vient d'être dit (paragraphe précédent), on voit que r(n) est vrai pour tout n, c'est-à-dire que p(n)∧q(n) l'est, et notamment p(n) est vrai pour tout n. ∎

On peut alors démontrer la proposition fondamentale suivante :

Proposition : tout entier naturel n est soit égal à 0 soit est le successeur d'un entier naturel m (c'est-à-dire n=S(m)) ; de plus, ces deux cas sont exclusifs (c'est-à-dire que zéro n'est pas le successeur d'un entier naturel) et le m dans le deuxième cas est unique (c'est-à-dire que la fonction S est injective).

Démonstration : On va observer successivement les points suivants :

‣ ① Tout entier naturel est soit 0 soit de la forme S(m) (autrement dit, ∀n∈ℕ.(n=0 ∨ ∃m∈ℕ.(n=S(m)))).

Ce point ① se démontre par une récurrence triviale sur n : la propriété que je viens de dire est trivialement vraie en 0 et trivialement vraie en S(m) si elle l'est en m (on n'a même pas besoin d'utiliser l'hypothèse de récurrence !).

Il reste à expliquer que la disjonction est exclusive et que le m est unique.

À cet effet, notons ℕ⊎{⬥} la réunion disjointe de ℕ et d'un singleton dont l'élément sera noté ‘⬥’.

Alors il existe une (unique) fonction D : ℕ → ℕ⊎{⬥} telle que D(0)=⬥ et D(S(n))=n pour tout n∈ℕ. En effet, je viens d'en donner une définition par récurrence avec paramètres (et j'ai expliqué plus haut pourquoi une telle définition est légitime).

Considérons dans l'autre sens la fonction S′ : ℕ⊎{⬥} → ℕ définie par S′(⬥)=0 et S′(n)=S(n) si n∈ℕ : cette définition est légitime par les propriétés générales des unions disjointes (définir une fonction sur XY revient à la définir sur X et sur Y séparément).

‣ ② Les fonctions D : ℕ → ℕ⊎{⬥} et S′ : ℕ⊎{⬥} → ℕ qui viennent d'être définies sont des bijections réciproques entre ℕ et ℕ⊎{⬥}.

En effet le fait que DS′=idℕ⊎{⬥} est immédiat sur les définitions, et le fait que S′∘D=id se vérifie séparément pour 0 et pour S(m), ce qui, d'après le point ①, suffit à conclure.

‣ ③ La fonction S est injective : ∀m₁∈ℕ.∀m₂∈ℕ.((S(m₁)=S(m₂))⇒(m₁=m₂)).

Ceci découle du point ② : si S(m₁)=S(m₂) alors D(S(m₁))=D(S(m₂)), c'est-à-dire m₁=m₂. (On, si on préfère : S est la restriction à ℕ de la fonction S′ qui est bijective donc injective, donc S elle-même est injective.)

‣ ④ L'élément 0 de ℕ n'est pas de la forme S(m) (i.e., ¬∃m∈ℕ.(0=S(m)), donc la disjonction au point ① est exclusive).

En effet, si S(m)=0 alors D(S(m))=D(0), c'est-à-dire m=⬥, contredisant le fait que la réunion ℕ⊎{⬥} a été prise disjointe.

Ceci conclut tout ce qui devait être démontré. ∎

Je répète que tout ceci n'a pas vraiment de rapport avec les maths constructives : il s'agissait ici de démontrer les axiomes de Peano (qui sont, en gros, les points ③ et ④ de la démonstration ci-dessus, ainsi que la récurrence sur les propriétés telles qu'énoncée plus haut) à partir du principe de récurrence « catégorique » que j'ai postulé. En arithmétique du premier ordre, ce sont ces axiomes de Peano qu'on va postuler, mais ici je travaille librement avec des ensembles, et c'est quand même important de savoir qu'on peut — et de façon complètement constructive — démontrer les axiomes de Peano dans le contexte où je me suis placé. Mais tout ce qui vient d'être écrit n'est quand même pas complètement hors sujet pour un billet sur les maths constructives, parce que j'ai notamment prouvé que pour tout entier naturel n on a n=0 ∨ ¬(n=0) (vu que j'ai prouvé n=0 ∨ ∃m∈ℕ.(n=S(m)) et que ¬(S(m) = 0)), ce qui est l'ingrédient essentiel pour pouvoir dire que ℕ est discret, cf. ci-dessous.

On peut ensuite dérouler les définitions et sorites habituels sur les entiers naturels. L'addition ℕ×ℕ→ℕ, (m,n)↦m+n est définie par récurrence sur n par m+0=m et m+S(n)=S(m+n) ; la multiplication ℕ×ℕ→ℕ, (m,n)↦m×n est définie par récurrence sur n par m×0=0 et m×(S(n))=(m×n)+m (et on pose 1:=S(0), ce qui ne doit pas causer de confusion avec la notation pour un singleton, avec lequel on peut d'ailleurs choisir d'identifier 1 si on travaille sur des fondements ensemblistes) ; l'exponentiation ℕ×ℕ→ℕ, (m,n)↦mn est définie par récurrence sur n par m↑0=1 et m↑(S(n))=(mnm ; et l'ordre large (≤) ⊆ ℕ×ℕ (qu'on peut préférer voir comme sa fonction indicatrice ℕ×ℕ→Ω) par mn ssi il existe k tel que n=m+k (et on définit nm comme synonyme de mn, et m<n ou n>m comme synonyme de S(m)≤n disons).

Comme je l'avais évoqué dans un bout d'une entrée précédente sur le sujet, « la plupart » des résultats arithmétiques du premier ordre (i.e., ne parlant que d'entiers naturels, pas de fonctions ou de parties des entiers naturels) valables en maths classiques restent valables en maths constructives. Par exemple :

  • l'addition est associative et commutative et 0 est neutre pour elle, la multiplication est associative et commutative et 1 est neutre pour elle, la multiplication est distributive sur l'addition, l'exponentiation vérifie les règles de calcul dont on a l'habitude ;
  • l'ordre est total et se comporte comme on s'y attend venant des maths classiques : si m,n∈ℕ alors mn ou mn, et en fait on a exactement une des trois affirmations m<n ou m=n ou m>n, on a mn si et seulement si m<n ou m=n, on a mn si et seulement si ¬(m<n), on a m<n si et seulement si ¬(mn) ;
  • l'ordre est compatible avec les opérations au sens où par exemple mn et m′≤n′ impliquent m+m′≤n+n′ et m×m′≤n×n′ ;
  • la division euclidienne, la définition des nombres premiers, l'existence et l'unicité de la décomposition en facteurs premiers, tout ça fonctionne essentiellement comme en maths classiques (je ne rentre pas dans les détails).

J'insiste notamment sur le fait que pour m,n entiers naturels, on a (m=n)∨¬(m=n) : c'est-à-dire que ℕ est discret comme défini précédemment. Il est donc légitime d'écrire mn pour ¬(m=n).

Il n'est donc pas abusé de dire que l'arithmétique du premier ordre voit « très peu de différences » entre les maths constructives et les maths classiques. Il y a la même ressemblance pour toute la théorie des structures finies (groupes finis, graphes finis, ce genre de choses), quand on définit fini comme en bijection avec {1,…,n} pour un certain n∈ℕ, ce que j'expliquerai après ; c'est-à-dire dès lors que la structure peut se « coder » comme entiers naturels et donc se représenter en arithmétique du premier ordre : intuitivement, l'explication est que les énoncés décidables par énumération de tous les cas ne peuvent pas se comporter différemment en maths constructives des maths classiques.

J'écris la plupart des résultats et très peu de différences entre guillemet, parce que même en arithmétique du premier ordre, il n'est pas correct que tout énoncé démontrable classiquement est démontrable constructivement. Le résultat technique précis, que j'avais déjà évoqué en passant dans un billet précédent, est que tout énoncé arithmétique Π₂ démontrable dans l'arithmétique de Peano est démontrable dans l'arithmétique de Heyting [la théorie donnée en logique intuitionniste par les axiomes de Peano du premier ordre usuels] : ici, Π₂ signifie qu'il est quantifié de la forme ∀∃, c'est-à-dire une succession de quantificateurs universels devant une succession de quantificateurs existentiels, tous portant sur des entiers naturels, devant un énoncé à quantificateurs bornés (donc, en pratique, finiment testable). Pour trouver des affirmations du premier ordre sur les entiers naturels intéressantes qui sont démontrables classiquement mais pas constructivement, il faut se gratter un peu la tête, mais c'est possible. Je pense que la plus simple est toute machine de Turing soit termine soit ne termine pas (ce qui est classiquement trivial mais pas démontrable en arithmétique de Heyting) ; bien sûr, formaliser ceci exige de définir au préalable (arithmétiquement au premier ordre) la notion de machine de Turing. J'avais plus ou moins expliqué ce fait dans ce billet passé. (On peut même donner des machines de Turing précises et explicites dont on ne peut pas montrer constructivement qu'elles terminent ou ne terminent pas, mais ceci exigerait d'être plus précis que je ne l'ai été sur les fondements que j'ai utilisés, parce qu'en gros il s'agira de la machine de Turing qui recherche une contradiction dans les fondements en question.)

Néanmoins, cette ressemblance entre maths classiques et maths constructives vaut pour l'arithmétique du premier ordre, i.e., tant qu'on ne parle (et surtout, ne quantifie sur) que des entiers naturels. Dès qu'il est question de suites (cf. plus bas) ou surtout d'ensembles d'entiers naturels, les différences entre maths classiques et constructives apparaissent clairement.

↑Entry #2798 [older| permalink|newer] / ↑Entrée #2798 [précédente| permalien|suivante] ↑

↓Entry #2796 [older| permalink|newer] / ↓Entrée #2796 [précédente| permalien|suivante] ↓

(jeudi)

Introduction aux mathématiques constructives : 1. un peu de théorie des ensembles

Avant-propos

Il y a quelques années j'avais publié sur ce blog une petite introduction générale aux mathématiques constructives (ou mathématiques sans le tiers exclu). Dans ce billet passé, j'avais cherché à en présenter très rapidement l'histoire (de façon j'espère compréhensible par le grand public), puis les motivations possibles (à quoi ça sert de faire des maths « constructives », et pourquoi ce terme ?) et les principes généraux (qu'est-ce que la logique intuitionniste, et comment fonctionne-t-elle ?). Cette introduction (dont je vais d'ailleurs répéter certains des points dans le présent billet) était, je pense, plus réussie que ma précédente tentative sur le même sujet. Mais on ne peut pas vraiment dire que j'avais parlé du fond du sujet : je n'avais pas vraiment donné d'exemples maths constructives (ni vraiment de raisonnement ni même de définitions) permettant de comprendre un peu comment « ça se passe ».

Le présent billet, et quelques uns qui doivent suivre, ont pour but de remédier un peu à ce manque : cette fois je ne veux pas m'attarder démesurément sur les aspects logiques ou « légalistes » (et surtout pas me placer dans un système formel très précis), je veux plutôt montrer « ce qui se passe » quand on retire la loi du tiers exclu de la logique et qu'on cherche à faire des maths comme ça : ce qui reste globalement inchangé, ce où il faut faire un peu attention, ce qu'il faut faire différemment, et ce qui ne marche plus du tout.

Il va de soi que je ne vais pas parler de choses très sophistiquées, surtout dans ce premier volet : théorie élémentaire des ensembles, suites d'entiers naturels, nombres réels, ce genre de choses. Les quelques théorèmes que je vais donner à titre d'illustration sont faciles : parfois complètement triviaux quand on les traite en maths classiques, et généralement pas bien difficiles non plus même en maths constructives, puisque mon but n'est pas de faire des choses compliquées (ni très systématiques même pour les choses que je vais évoquer) mais de montrer un peu « à quoi ça ressemble » et comment on tient des raisonnements simples en logique intuitionniste.

La logique intuitionniste étant plus faible que la logique classique (je vais un peu rappeler les choses ci-dessous), tout ce qu'on démontre en maths constructives est a fortiori valable en maths classiques. Donc en principe je pourrais écrire les choses en m'adressant à des gens qui ne connaissent rien à la théorie élémentaire des ensembles même en maths classiques : mais je pense que personne ne voudrait sérieusement lire ça, donc je vais plutôt supposer de la part du lecteur une familiarité modérée avec les concepts correspondants en maths classiques. Disons que je suppose que vous savez ce qu'est un ensemble (je ne veux pas forcément dire manier les axiomes de ZFC mais au moins les concepts d'union, d'intersection, de produit cartésien, de sous-ensemble, d'ensemble des parties, de singleton — ce genre de choses, et ce dans un cadre informel), et, pour les billets à venir après celui-ci, ce qu'est un entier naturel, un rationnel et un nombre réel. Je suppose aussi qu'on est familier avec la notion de fonction entre ensembles, l'identification d'une fonction à son graphe, avec la notion de relation d'équivalence et de classe d'équivalence, quelques choses de ce genre-là. Ceci me permettra, par exemple, de ne pas trop perdre mon temps à expliquer comment fonctionne un produit cartésien d'ensembles en maths constructives vu qu'il s'agit essentiellement de dire sur cet aspect-là il n'y a rien de surprenant, de nouveau ni de substantiellement différent par rapport aux maths classiques, et donc de me concentrer sur les questions où les maths constructives demandent plus de soin. Je suppose aussi mon lecteur familier avec les notations logiques telles que ‘∧’ (conjonction, ou « et » logique), ‘∨’ (disjonction, ou « ou » logique), ‘⇒’ (implication), ‘⊤’ (affirmation tautologiquement vraie), ‘⊥’ (affirmation tautologiquement fausse), ‘∀’ (quantification universelle) et ‘∃’ (quantification existentielle).

Certaines autres présentations des maths constructives essaient de faire en sorte de gommer la différence avec les maths classiques. (Bishop, par exemple, dans son livre d'analyse constructive, présente les choses d'une manière qu'on pourrait très bien lire comme un cours d'analyse classique : il présenter les maths constructives comme on pourrait présenter les maths classiques, de mettre l'accent sur là où « tout marche bien ». Car Bishop était un constructiviste dans l'âme, donc son but est de faire des maths, et il s'avère qu'il pense que le cadre constructif est le meilleur. Il ne s'agit pas pour lui de montrer les difficultés ou bizarreries de ce cadre, mais juste de faire des maths.) Moi, au contraire, je trouve intellectuellement plus intéressant de savoir ce qui change, ce qu'on perd, ce qui « marche mal », ou, finalement, ce qu'on gagne en phénomènes intéressants et « pathologiques », ou en distinctions fines qui deviennent classiquement triviales. Dans le présent billet, comme je ne suppose pas que le lecteur ait quelque connaissance que ce soit sur les topos (ni même ce que le mot signifie, même si je rappelle que j'ai écrit un billet sur le topos effectif), je ne peux pas vraiment donner de vrais contre-exemples montrant que telle ou telle pathologie peut se produire en maths constructives ; néanmoins, je peux (et je vais) essayer de donner un certain nombre de « contre-exemples brouwériens », un concept que je vais expliquer ci-dessous.

Méta : Pour finir cet avant-propos, je dois préciser que quasiment tout ce qui suit a été écrit par petits bouts entre 2022 et maintenant (suivant une idée que j'avais posée en 2021), et remanié plusieurs fois depuis, de manière très aléatoire. Il y a donc certainement des incohérences au moins stylistiques, si ce n'est notationnelles, présentationnelles, etc. Mais je pense rien de grave. Bref, j'avais progressivement écrit un long texte divisé en trois parties, avec une première sur la théorie élémentaire des ensembles, une seconde sur les naturels et les suites de naturels, et une troisième (inachevée) sur les nombres réels. C'est cette première partie que je publie aujourd'hui, je publierai la deuxième prochainement, quant à la troisième je dois encore décider si je m'efforce de la finir de façon plus ou moins satisfaisante ou si je la publie de façon inachevée. Toujours est-il que j'ai moi-même besoin de me référer de temps en temps à certaines des notions que j'introduis dans ce texte (surtout les notions de LPO, WLPO, LLPO, etc., qui seront discutées dans la partie 2) et c'est pour ça que je me décide à mettre tout ça en ligne même si ce n'est pas forcément hyper propre.

Rappel du contexte et quelques notations

Redisons rapidement ici quelques unes des choses que j'ai évoquées dans ma précédente introduction aux maths constructives.

Très sommairement, donc, les maths constructives sont des maths faites en logique intuitionniste, c'est-à-dire dans laquelle on abandonne le principe de tiers exclu selon lequel toute affirmation P est soit vraie soit fausse (P∨¬P), ou, ce qui revient au même, que si une affirmation P n'est pas fausse alors elle est vraie (¬¬PP ; en revanche, P n'est pas vrai est la même chose que P est faux, c'est la définition). (Les termes de maths constructives et de logique intuitionniste ne sont pas tout à fait interchangeables, mais je vais les traiter un peu comme tels : voir la partie historique de l'entrée précédente pour plus de précisions sur l'histoire des termes.) La logique intuitionniste étant plus faible que la logique classique, tout résultat obtenu dans ce cadre restera valable dans le cadre de la logique classique : on aura moins de théorèmes (et ceux qui restent peuvent devenir plus durs à démontrer), mais du coup, on peut considérer qu'une preuve constructive est plus forte (plus rare, donc plus difficile) qu'une preuve classique. Parmi les raisons de vouloir s'imposer la discipline de chercher à faire des preuves constructives, on peut notamment mentionner :

  • certains pensent (mais ce n'est pas mon cas) que les mathématiques constructives sont plus correctes, parce qu'elles sont plus en accord avec leur conception philosophique de l'univers mathématique (cf. ce que je racontais sur Brouwer) ; on peut aussi simplement penser que la logique intuitionniste, à défaut d'être plus correcte, est plus économique que la logique classique, et qu'on doit donc essayer de travailler avec ;
  • les preuves constructives (donc les théorèmes qu'elles produisent) sont valables plus largement que les preuves classiques (notamment, un énoncé constructivement valable est valable dans n'importe quel topos muni d'un objet d'entiers naturels) ;
  • les preuves constructives apportent plus d'information que les preuves classiques (notamment, dans certaines conditions, on peut extraire un algorithme d'une preuve constructive qui calcule l'objet dont le théorème affirme l'existence — d'où le terme de constructif) ;
  • la question de savoir ce qui est prouvable constructivement apporte un nouveau regard sur des théorèmes connus, qui peut être intéressant du point de vue logique, ou du point de vue pédagogique, en permettant de mieux comprendre les liens logiques entre les théorèmes et les difficultés à passer de l'un à un autre ;
  • le fait de s'assurer que les définitions ou les lemmes utilisées fonctionnent bien dans un contexte constructif peut être un critère pour choisir la « bonne » définition ou la « bonne » preuve entre des possibilités classiquement indifférentes (et on peut espérer que la « bonne » se généralisera mieux) : par exemple, classiquement, en topologie, on peut définir les fermés à partir des ouverts ou les ouverts à partir des fermés, mais constructivement, seule la première approche fonctionne, ce qui suggère qu'il vaut mieux définir une topologie par ses ouverts ;
  • certains outils informatiques assistants de preuve, provenant de systèmes de typage, fonctionnent naturellement en logique intuitionniste : même si on peut les faire travailler en logique classique en postulant le principe du tiers exclu, on peut penser qu'une preuve valable constructivement sera plus facile à produire, à analyser ou à utiliser dans de tels outils ;
  • et enfin, bien sûr, la question de savoir si un résultat est valable constructivement est une question mathématique (classique !) tout à fait légitime, qu'on peut considérer pour son intérét intellectuel intrinsèque.

Mais avant de commencer vraiment, il faut que je dise un mot sur les règles du jeu. J'ai (plus ou moins) décrit les règles de la logique dans une partie de mon entrée précédente, et mon but est de les illustrer par l'exemple, donc je ne vais pas les réexpliquer ici, mais il faut que je parle un peu du cadre dans lequel je me place (parce qu'il n'y a pas un cadre unique pour faire des maths constructives) :

Dans ce qui suit, je vais me placer dans un cadre informel utilisant des conventions fondationnelles choisies pour dérouter le moins possible le mathématicien classique. Techniquement, les choses que je vais dire (correctement formalisées) seront vraies dans n'importe quel topos muni d'un objet d'entiers naturels, ou seront des théorèmes de la théorie IZF (un analogue assez standard de ZF en logique intuitionniste), mais je n'ai pas envie de définir ni ce qu'est un topos ni ce que sont les axiomes d'IZF parce que ce serait contraire à mon objectif pédagogique. Je vais essayer de rester agnostique ou vague quant à la question de savoir si je considère que « tout est un ensemble » (comme c'est le cas si on se place dans IZF) ou si les objets ont des types (ça n'a pas vraiment de rapport avec l'intuitionnisme, disons qu'il est peut-être plus tentant en maths constructives de travailler dans des théories des types que dans des fondements ensemblistes, mais comme mon but est de faire des choses élémentaires je n'ai pas envie de faire de choix ni même d'expliquer la différence). Pour ceux qui ont besoin de détails (les autres, sautez la fin de ce paragraphe), je précise cependant certaines des choses que je prends dans mes fondations, ou qui en résulte. D'abord, l'égalité fonctionne comme on l'attend classiquement, c'est-à-dire que c'est la plus fine relation d'équivalence et elle est extensionnelle (c'est-à-dire que d'une part si x=y alors f(x)=f(y) pour n'importe quelle fonction f, prédicat ou expression faisant intervenir une variable libre ; et d'autre part si deux ensembles X,Y ont les mêmes éléments, ∀t.(tXtY), alors ils sont égaux, et si deux fonctions f,g ayant mêmes source et but prennent les mêmes valeurs ∀t.(f(t)=g(t)), alors elles sont égales). Je suppose aussi que les ensembles de parties peuvent être formés librement, et je noterai 𝒫(X) l'ensemble des parties de X (par ailleurs l'ensemble des parties d'un singleton jouera notamment un rôle crucial comme l'ensemble des « valeurs de vérité », je vais y venir). En revanche, je ne peux pas supposer l'axiome du choix (on va voir qu'il implique le tiers exclu), et je ne veux pas le faire, même pas l'axiome du choix dénombrable, parce que même classiquement il y a un intérêt à étudier ce qui se passe sans lui, mais je vais revenir sur ce sujet ; je vais quand même postuler l'« axiome du choix unique » (ou axiome du non-choix) que j'expliquerai plus loin.

☞ Je rappelle à toutes fins utiles que dire P (où P est une formule logique) signifie exactement la même chose que de dire P est vraie (cf. le début de cette entrée, qui concerne les maths classiques mais ce n'est pas pertinent ici) ; et dire P est fausse ou P n'est pas vraie signifie exactement la même chose que ¬P (la négation de P, qui est un raccourci de langage pour P⇒⊥, c'est-à-dire si P est vraie, alors les poules ont des dents). Là où la logique intuitionniste diffère de la logique classique c'est qu'elle ne permet pas de passer de P n'est pas fausse (i.e., ¬¬P) à P est vraie. (En revanche, trois négations équivalent à une seule, quatre à deux, etc. : il est faux que P n'est pas fausse est pareil que P est fausse, et il n'est pas faux que P n'est pas fausse est pareil que P n'est pas fausse.)

Ça n'a rien à voir avec la logique intuitionniste, mais je signale aussi, s'il y avait un doute, que PQR doit se lire comme P⇒(QR), et qu'il est équivalent à PQR (lequel doit se lire, lui, comme (PQ)⇒R). Sauf dans le contexte où je signale informellement un tas d'implications en série : on a les implications successives PQRS doit bien sûr se comprendre comme on a PQ et aussi QR et aussi RS. J'espère que cela ne causera pas de confusion.

Pour attirer l'attention sur les principales surprises des maths constructives par rapport aux maths classiques, j'utiliserai le souligné comme ceci (pour dire quelque chose comme on ne peut pas affirmer que pati-pata) ou le rouge comme ceci (pour un bout de raisonnement qui n'est pas valable constructivement ; mais de toute façon je le dirai toujours explicitement).

Ensembles vides et habités, singletons, sous-terminaux, valeurs de vérité

Commençons par la notion la plus simple qui soit, celle d'ensembles vide et habités.

On dit que E (un ensemble « dans l'univers » ou bien une partie d'un autre ensemble X, j'ai dit que je ne voulais pas rentrer dans ce genre de questions) est vide lorsqu'il n'a pas d'élément, c'est-à-dire, en symboles, ¬∃x.(xE) (il n'existe pas de x qui appartienne à E) ou, ce qui revient logiquement au même ∀x.¬(xE) (quel que soit x, il est faux que x appartienne à E), ou si on préfère l'écrire comme ça, ∀xE.(⊥) (tout x appartenant à E conduit à une absurdité, le symbole ‘⊥’ désigne l'énoncé tautologiquement faux, et l'ensemble vide est donc l'ensemble des x qui vérifient ⊥), avec la convention habituelle que ∀xE.(P(x)) signifie ∀x.(xEP(x)) (de même que ∃xE.P(x) signifie ∃x.(xEP(x)) ; et je rappelle par ailleurs que ¬P signifie P⇒⊥).

Tout ce que je viens de dire est exactement pareil qu'en mathématiques classiques, et on note ∅ l'ensemble vide (unique par extensionnalité, au moins en tant que partie d'un X fixé).

Mais la notion d'ensemble non-vide, i.e., d'ensemble vérifiant ¬(E=∅), elle, n'a que très peu d'intérêt constructif : un ensemble E est non-vide s'il vérifie ¬¬∃x.(xE) ou, ce qui revient au même ¬∀x.¬(xE), mais on ne peut pas faire grand-chose avec un ensemble non-vide : notamment, on ne peut pas affirmer qu'un ensemble non-vide a un élément (je vais revenir là-dessus ci-dessous).

Ce qui est beaucoup plus utile, donc, est la notion d'ensemble habité, c'est-à-dire d'ensemble vérifiant ∃x.(xE), ou, si on préfère l'écrire comme ça, ∃xE.(⊤) (le symbole ‘⊤’ désigne l'énoncé tautologiquement vrai) : un ensemble habité est un ensemble ayant un élément. Du coup, un ensemble vide est simplement un ensemble non-habité (ou inhabité, mais attention à la confusion entre français et anglais ici !).

Il s'agit là d'un exemple extrêmement simple d'un phénomène assez courant en mathématiques constructives : quand on a deux notions qui classiquement sont simplement la négation l'une de l'autre (parfois les deux ont un nom, parfois seulement l'une des deux), constructivement on va généralement attacher plus d'importance à celle qui permet de définir l'autre comme sa négation (ici, habité permet de définir vide comme non-habité, mais vide ne permet pas de définir habité, qui est plus fort que non-vide) : généralement parlant, en mathématiques constructives, les négations ont d'assez mauvaises propriétés, donc on s'attache autant que possible à définir des notions positives. (Bien sûr, la situation n'est pas toujours aussi simple que ce que je viens de décrire : parfois une même notion classique donne naissance à plusieurs notions constructives entre lesquelles il n'est pas évident de choisir, voir par exemple ici/ sur Twitter concernant la notion de « corps ».)

↑Entry #2796 [older| permalink|newer] / ↑Entrée #2796 [précédente| permalien|suivante] ↑

↓Entry #2793 [older| permalink|newer] / ↓Entrée #2793 [précédente| permalien|suivante] ↓

(dimanche)

De la beauté et symétrie de la configuration de Desargues

Le théorème de Desargues, que je veux présenter ici, est à la fois un des plus simples et selon moi un des plus jolis et des plus importants de la géométrie plane. Simple, parce qu'il n'est question que de points et de droites (pas de distances, d'angles, de cercles ni de quoi que ce soit du genre, même pas de parallélisme ou de perpendicularité : on dit que c'est un théorème de « géométrie projective »), et parce qu'il n'y a qu'un petit nombre de points impliqués (c'est quasiment le plus simple possible). Joli pour les raisons que je vais essayer d'expliquer, qui tiennent largement à sa symétrie. Et important parce qu'il est un des axiomes de certaines présentations de la géométrie projective. Pourtant, il ne fait pas du tout partie de l'enseignement de la géométrie en France (certainement pas à l'école primaire, mais pas non plus au collège, ni au lycée, ni même dans les classes préparatoires aux grandes écoles). Je vais essayer de parler un peu[#] de ce théorème, et de la « configuration » de points et de droites qu'il définit, en faisant plus d'efforts que d'habitude pour rester compréhensible par le grand public, au moins au début de ce billet, quitte à reléguer des considérations plus techniques en appendice. (Vais-je pour autant arriver à être compréhensible ? à vous de me dire.) En plus, pour changer des billets de ce blog qui sont généralement du pur texte, vous aurez droit à des illustrations, qui, j'espère, rendent les choses plus compréhensibles ! (Que demande le peuple ?) Notez que vous pouvez cliquer sur n'importe laquelle de ces images pour l'agrandir (et comme elles sont quasiment toutes vectorielles, vous pouvez utiliser quelque chose comme control-+/control-− dans votre navigateur pour zoomer ou dézoomer).

[#] Enfin, un peu est une façon de parler, parce que j'ai passé un temps totalement déraisonnable à écrire ce billet (ce qui explique, comme souvent, que la fin soit sans doute un peu bâclée parce que j'en ai eu vraiment marre).

Table des matières

Théorème de Desargues et configuration de Desargues

☞ L'énoncé du théorème de Desargues

[Schéma illustrant le théorème de Desargues]Bon, alors que dit le théorème de Desargues ? Si on aime l'exercice de formuler les maths avec des phrases en français en évitant d'introduire des notations, on peut le dire ainsi :

Deux triangles ont un centre de perspective si et seulement si ils ont un axe de perspective.

Qu'est-ce que ça signifie ?

La figure ci-contre illustre la situation : les deux triangles ABC₁ (en rose sur la figure) et ABC₂ (en orange sur la figure) sont dits avoir un centre de perspective lorsque les trois droites reliant les sommets de même nom, c'est-à-dire les droites AA₂, BB₂ et CC₂ (en vert sur la figure), concourent[#2], leur point de concours, que j'ai appelé O, étant alors appelé le « centre de perspective » des deux triangles. (Je vais tenter de justifier ce terme, mais on peut s'imaginer que les deux triangles sont dans l'espace et que si on place son œil en O les deux triangles coïncident visuellement.) Pour ce qui est de l'autre notion, il faut considérer les intersections des côtés de même nom des triangles, c'est-à-dire l'intersection des droites BC₁ et BC₂ (appelons-la U), l'intersection des droites CA₁ et CA₂ (appelons-la V) et l'intersection des droites AB₁ et AB₂ (appelons-la W), que j'ai représentées en bleu sur la figure. Lorsque ces trois points (U,V,W) sont alignés[#3], les deux triangles sont dits avoir un axe de perspective, et l'axe en question est la droite qui les relie (la droite bleue sur ma figure).

[#2] On dit que des droites concourent en un point lorsqu'elles passent par ce point (on dit aussi qu'elles sont incidentes à ce point, ou que ce point est incident aux droites, mais le verbe concourir peut s'utiliser pour les droites seules, pourvu qu'il y en ait au moins trois : un tas de droites concourent, ou sont concourantes lorsqu'elles passent toutes par un même point, qu'on appelle fort logiquement leur point de concours).

[#3] On dit que des points sont alignés lorsqu'il y a une droite qui passe par tous ces points.

Le théorème de Desargues, donc, dit que ces deux situations sont équivalentes : si les deux triangles ont un un centre de perspective, alors ils ont un axe de perspective, et réciproquement, si les deux triangles ont un un axe de perspective, alors ils ont un centre de perspective. Une fois le théorème acquis, on peut dire que les triangles sont en perspective pour désigner cette situation.

☞ La configuration de Desargues

[Schéma illustrant la configuration de Desargues]Et lorsque c'est le cas, les 10 points de la figure, c'est-à-dire les sommets A₁,B₁,C₁ et A₂,B₂,C₂ des deux triangles, le centre de perspective O et les trois points U,V,W dont l'alignement définit l'axe de perspective, forment ce qu'on appelle une configuration de Desargues. Notons qu'il y a aussi 10 droites dans l'histoire, et il faut considérer qu'elles font elles aussi partie de la configuration : les côtés des deux triangles (i.e., les droites qui les portent), l'axe de perspective, et les trois droites dont le concours définit le centre de perspective. Donc 10 points et 10 droites, et on remarquera que chacun des 10 points de la configuration est sur 3 droites, et chacune des 10 droites de la configuration passe par 3 points. J'ai représenté la configuration (enfin, une configuration) de Desargues ci-contre à gauche, en retirant toutes les étiquettes et couleurs de la figure illustrant le théorème plus haut (et en prolongeant les droites indéfiniment), mais c'est vraiment la même que celle de la figure précédente, je vais en reparler. Ma façon de présenter la configuration à partir du théorème laisse penser que certains points ou droites jouent un rôle différent des autres (le centre de perspective a l'air très spécial), mais en fait non, et je vais tenter de l'expliquer plus bas — tous les points et toutes les droites jouent en fait le « même rôle » dans cette configuration.

☞ Histoire de la perspective et géométrie « projective »

Mais revenons d'abord un peu au théorème lui-même.

Il est nommé d'après le géomètre et architecte lyonnais Girard Desargues (1591–1661), dont on ne sait pas grand-chose, mais l'énoncé apparaît semble-t-il[#4] dans un livre sur la perspective publié en 1647 par le graveur Abraham Bosse.

[#4] Je dis semble-t-il parce que je n'ai pas moi-même trouvé quelque chose ressemblant à l'énoncé dans le texte que je viens de lier sur Gallica, mais il est vrai que c'est très difficile de s'y retrouver, surtout que le texte n'est pas cherchable, que le livre n'a pas d'index, que j'ignore quelle terminologie serait utilisée, que je ne sais pas si ce serait énoncé comme un fait général ou à travers des exemples, etc. Donc je ne peux pas donner de référence plus précise. Mais ce qui est certain, c'est que Desargues semble avoir bien compris les principes de la perspective d'une manière qui permettrait le développement ultérieur de la géométrie projective — et aussi de la géométrie descriptive. Et on trouve essentiellement la figure ci-dessus à la planche 155 entre les pages 340 et 341, ici sur Gallica, à ceci près qu'il y a deux triangles à la fois : les triangles OAB et oab, ou bien ABD et abd, de cette planche sont en perspective au sens que j'ai défini ci-dessus, le point K de la planche étant ce que j'ai appelé le centre de perspective, et la droite par les points 2,3,4,7,5,8 étant ce que j'ai appelé l'axe de perspective.

↑Entry #2793 [older| permalink|newer] / ↑Entrée #2793 [précédente| permalien|suivante] ↑

↓Entry #2791 [older| permalink|newer] / ↓Entrée #2791 [précédente| permalien|suivante] ↓

(mardi)

Débriefing de mon cours Logique et Fondements de l'Informatique

J'avais expliqué il y a quelques mois que je m'étais engagé à monter un nouveau cours d'informatique théorique (ou faut-il dire de maths de l'informatique ?) pour certains élèves de première année à Télécom PlusÀParis, intitulé Logique et Fondements de l'Informatique (nom de code interne : INF110). (J'avais d'ailleurs publié un premier jeu de transparents dans de billet.) L'occurrence 2023–2024 de ce cours a eu lieu de à , le contrôle le , et maintenant (enfin, quelques mois après) que j'ai à la fois rendu les notes finales et reçu les retours (anonymes) des étudiants je suis en mesure d'en faire un premier bilan. L'idée de ce billet n'est pas tellement d'entrer dans le fond du sujet (même si je ne peux pas ne pas en parler du tout), à ce sujet voir plutôt les deux paragraphes ci-dessous, mais de parler au niveau méta : pourquoi ce cours, pourquoi ce sujet, comment je l'ai organisé et préparé, ce qui a bien marché et ce qui n'a pas bien marché. Le but est de me permettre à moi-même de faire le point, et donc de réfléchir à ce que je veux changer l'an prochain, et aussi de préparer un exposé où je dois raconter tout ça (cf. la fin du présent billet).

☞ Pour le fond du sujet, je renvoie notamment à ce billet sur la correspondance de Curry-Howard et à celui-ci sur la réalisabilité propositionnelle, qui sont largement adaptés de certains bouts de mon cours, même si la présentation est différente et qu'ils vont plus loin (surtout le second). Je peux aussi renvoyer à ce billet sur des sujets variés en vrac sur lesquels j'ai appris des choses en préparant ce cours. Enfin, je fais un lien vers ce billet sur les degrés de Turing et leur généralisation parce qu'il touche à des questions adjacentes, même si je n'ai pas fait plus qu'évoquer la définition de degré de Turing (ordinaire) dans mon cours.

☞ Pour ce qui est des documents pédagogiques accompagnant le cours, voici quelques liens (dont, malgré ma passion pour la stabilité des URL, je ne garantis pas qu'ils seront pérennes, parce que je ne sais pas comment je vais les réorganiser à l'avenir). D'abord le PDF des transparents (qui est la concaténation idiote de trois parties inégales : ① calculabilité, ② typage simple et calcul propositionnel et ③ introduction aux quantificateurs ; j'ai aussi fait une version « imprimable » des transparents : , et ). Les exercices d'entraînement sont : ici sans corrigé et ici avec corrigé. Et le sujet du contrôle est ici sans corrigé et ici avec corrigé. Et si des gens sont intéressés par le source de tout ça, le dépôt Git est ici.

Avertissement usuel : même si j'évoque ici mon travail d'enseignant-chercheur à Télécom, je dois rappeler que, dans ce billet comme ailleurs sur ce blog, je m'exprime à titre purement personnel et que les avis et opinions que je peux exprimer ici (ou ailleurs) sont juste les miens et n'engagent en aucun cas mon employeur (ni qui que ce soit d'autre que moi, et d'ailleurs ils ne m'engagent même pas moi vu que que je me réserve le droit d'en changer à tout moment et sans prévenir). J'ajoute que si vous faites partie des personnes qui ont besoin d'un tel avertissement, il vous est interdit de lire la suite de ce billet.

Plan du billet

Le contexte

Comme je l'ai expliqué dans les billets déjà liés ci-dessus (celui-ci et celui-là), la France a récemment créé une filière MPI (maths, physique et informatique) dans ses classes préparatoires scientifiques[#]. En particulier, les élèves entrant à Télécom par le concours commun peuvent arriver avec trois niveaux de formation en informatique : le socle commun MP/PC (où il n'y a pas grand-chose en info), l'option informatique en MP (qui existait déjà), et la nouvelle filière MPI (qui va encore plus loin). Les programmes de toutes ces filières sont trouvables par exemple sur ce site). Ceci nous a imposé une réforme de nos enseignements en première année : jusqu'à l'été 2023 notre première année était complètement uniforme (en gros, tout le monde avait les mêmes cours, le choix d'une filière de spécialisation se faisant en seconde année), mais ce mode de fonctionnement devenait intenable, au moins pour ce qui est de l'informatique, avec de telles différences de formation à l'entrée (si on s'adapte à ceux qui en ont fait le moins, ceux qui en ont fait plus s'ennuient, et si on s'adapte à ceux qui en ont fait le plus, ceux qui en ont fait le moins sont largués).

[#] Au niveau de la reconnaissance de l'informatique comme une science à part entière, il y a aussi eu création d'une agrégation d'informatique pour le recrutement des enseignants alors que l'informatique était jusqu'alors considérée comme une option de l'agrégation de mathématiques. Et, un peu avant, des changements au niveau lycée avec la création d'une spécialité NSI, c'est-à-dire numérique et sciences informatiques, mais ça ne me concerne que beaucoup plus indirectement : de ce que je comprends, à cause de la limitation à deux spécialités en terminale, la (grande ?) majorité des élèves de prépa, y compris MPI, n'ont pas suivi cette spécialité NSI en terminale, mais bien maths et physique-chimie.

Mais ce n'est pas, en fait, qu'une question de niveau en entrée : les élèves ayant choisi la filière MPI semblent avoir des attentes et des intérêts différents de ceux de la filière MP (même « option info »), au sens où ils semblent généralement plus intéressés par l'informatique pour elle-même et pas juste comme un outil dans un travail d'ingénieur (parce qu'évidemment tout le monde utilise l'informatique de nos jours). Et un des buts de la réforme que nous avons mise en place est de rentre Télécom plus attirante pour les préparationnaires vraiment intéressés par l'informatique, avec notamment l'idée qu'il ne faut pas qu'ils s'ennuient en cours.

La première année à Télécom est (maintenant) divisée en quatre périodes. Pour ce qui est de l'enseignement d'informatique, voici comment nous avons organisé l'année. La période P1 (septembre–octobre) a été dédiée à une introduction générale à la programmation, du matériel au haut niveau, tandis que les élèves venus de la filière MPI (et uniquement eux) ont un cours spécifique sur la compilation. La période P2 (novembre–janvier) est consacrée à la théorie de l'informatique, et c'est celle qui me concerne et dont je vais reparler. La période P3 (février–avril) propose le choix entre différents paradigmes de programmation. Et la période P4 (avril–juin) est consacrée aux réseaux. Sur chacune de ces périodes, les élèves ont environ 40h d'informatique (sauf en P3, moitié moins), c'est-à-dire environ 4h½ par semaine pendant les 9 semaines que dure la période. (Pendant le même temps, les élèves ont bien sûr aussi des cours dans les autres domaines : maths, physique+électronique, sciences économiques et sociales, langues et humanités ; plus des projets et stages variés, notamment entre les périodes. Je dis ça pour situer un peu l'enseignement dans son volume global.)

Pour ce qui est de l'enseignement d'informatique de la période P2 de première année, donc, nous avons divisé la population d'élèves en deux sous-populations inégales : ceux qui sont entrés par les filières MPI ou MP option info du concours commun ainsi que les admis sur titres après une licence d'informatique, soit au total ~90 élèves, et tous les autres, qui doivent représenter à peu près ~120 élèves. Les premiers ont eu le cours INF110 dont je me suis chargé et dont je parle ici, tandis que les seconds ont eu un cours (INF109) plus général sur l'algorithmique fondamentale et quelques rudiments de la calculabilité (recouvrant notamment une partie de ce que les autres élèves avaient déjà vu en prépa).

Bref, s'agissant de INF110, j'avais à m'occuper de 39 heures d'enseignement (contrôle de connaissances non compris), étalées sur 9 semaines, pour ~90 élèves. Nous avons décidé de séparer ces 39h en 21h de cours magistraux, et 18h de TD+TP lesquels ont été pris en charge par mon collègue Théo Z. Pour des raisons d'organisation de l'emploi du temps global de la première année, il n'était pas possible de regrouper les élèves tous ensemble pendant les cours magistraux, donc j'ai donné deux fois chaque séance (on arrive donc à 42h pour moi, si vous suivez).

De l'opportunité d'enseigner des sujets théoriques

Il faut que je dise ici un mot pour évoquer la question qui revient de façon récurrente dès qu'on parle de dispenser des cours assez « théoriques » (whatever that means) à des élèves majoritairement[#2] futurs ingénieurs. J'avais déjà droit à ce genre de remarques quand j'enseignais l'analyse de Fourier (cf. par exemple ce billet) : à quoi ça sert d'expliquer à des futurs ingénieurs la différence entre la transformée de Fourier dans L¹ et dans L² ? ce n'est pas ça qui va leur servir : de toute façon leur signal sera un ensemble fini de valeurs. Donc inévitablement on peut se demander pourquoi enseigner la calculabilité ou la logique intuitionniste quand ce même temps pourrait être employé à faire des cours de JavaScript et de Python, parce que c'est ça qui va leur servir — ou bien d'IA puisque maintenant tout le monde se rue sur l'IA comme des lemmings sur la falaise.

[#2] Je précise que majoritairement ne signifie pas exclusivement. Même sans parler des cas vraiment exotiques, et il y en a toujours (après tout, j'ai dans ma promo à Normale Sup un camarade qui a décidé que la passion de sa vie c'était le cirque, et qui a donc fait carrière dans les arts du spectacle après une thèse de physique quantique), il y a quand même une proportion, faible mais non complètement négligeable, d'élèves à Télécom qui décident de faire de la recherche plus ou moins théorique, c'est-à-dire de faire une thèse et éventuellement d'en faire carrière. Néanmoins, j'entends bien l'argument selon lequel l'enseignement ne doit pas se construire en fonction des intérêts d'une minorité. Donc ce n'est pas l'argument que j'invoque ici pour justifier l'intérêt de mon cours.

J'avais déjà répondu à cette objection, mais je ne sais pas si ma réponse me satisfait beaucoup. Disons que si un ingénieur n'est pas un chercheur (dont le métier consiste à proposer de nouvelles théories), il n'est pas non plus un technicien (dont le métier consiste à appliquer des techniques existantes) : l'ingénieur est justement là pour faire le pont entre les deux, pour appliquer la théorie à la création de nouvelles techniques ou au perfectionnement de celles qui existent, ce qui implique de bien maîtriser la théorie de son domaine, avec un certain recul sur celle-ci, pas juste comme des recettes de cuisine apprises par cœur. (Je devrais, ici, faire référence à la nouvelle Profession d'Asimov, mais c'est un peu difficile à faire sans divulgâcher ; donc je vais me contenter de dire : lisez-la.)

On se trompe gravement, je pense, en voulant centrer l'enseignement sur ce qui sert (ou plutôt, on se trompe gravement en ne mesurant pas toutes les manières dont quelque chose peut servir) : le but de l'enseignement, quel que soit son niveau, n'est pas principalement, ou en tout cas pas exclusivement, de fournir des outils qui serviront mais aussi des clés de compréhension de phénomènes, des cadres dans lesquels analyser ce à quoi on est confronté. Les outils, ce n'est pas qu'il ne faut pas les apprendre, mais ils ont tendance à être hautement spécifiques à une tâche précise, les outils nécessaires à tel ou tel métier s'apprennent normalement en entrant dans ce métier, ce n'est tout simplement pas le rôle de l'enseignement de former à s'en servir (sauf dans la mesure où ces outils sont extrêmement transverses). S'agissant de l'informatique, donc, on se trompe par exemple en pensant qu'il faut enseigner les langages de programmation qui seront utilisés ensuite : un langage de programmation, ça s'apprend rapidement, l'intérêt de les enseigner n'est pas d'enseigner ce qui servira mais d'enseigner ce qui permet de comprendre les différentes approches[#3] de la programmation et les différentes façon de concevoir une tâche.

[#3] Sur les langages de programmation, ce que je dis c'est que ça n'a, selon moi, aucun intérêt de se dire je vais apprendre/enseigner JavaScript et Python parce que c'est ce qui me/leur servira après ; il faut plutôt se dire je vais viser un échantillon représentatif des différents styles de langages de programmation pour comprendre les différentes approches : un langage bas niveau pour comprendre comment fonctionne la gestion de la mémoire, un langage purement fonctionnel et paresseux pour comprendre comment conceptualiser les tâches par une programmation d'ordre supérieur, un langage orienté objet pour comprendre le concept d'héritage, un langage distribué pour comprendre les difficultés de la programmation asynchrone et la manière dont on les résout, etc.

Donc l'intérêt d'enseigner la calculabilité, ce n'est certainement pas parce que ça va servir (même s'il est certainement utile qu'un ingénieur sache que certaines tâches ne sont pas réalisables algorithmiquement — et qu'en gros toute tentative d'analyser le comportement d'un programme devra reposer sur des heuristiques qui seront fatalement imparfaites), mais aussi parce que cela amène à prendre du recul sur les concepts fondamentaux de l'informatique (la récursion, l'auto-référence, la nature de l'évaluation dans les langages de programmation, la raison pour laquelle on se retrouve si facilement à être Turing-complet par accident — et peut-être aussi le fait que ce n'est pas très pertinent de chercher à l'éviter). À titre d'exemple, s'agissant de l'auto-référence, je dirais que quelqu'un qui a du recul sur la calculabilité et le théorème de récursion de Kleene ne sera absolument pas surpris par le fameux hack de Ken Thompson[#4] (d'ailleurs, Thompson lui-même explique le lien entre les quines et son hack), et c'est pertinent pour pouvoir prétendre maîtriser la sécurité informatique. Je peux dire quelque chose d'analogue pour le typage : ce n'est pas juste que c'est utile de comprendre les bases du typage et du polymorphisme parce que certains langages réellement utilisés en ont, mais c'est aussi nécessaire pour comprendre ce qui se passe (par exemple quand on cache des valeur dans une clôture, quand on passe des valeurs par continuation — ce qui sont des paradigmes de programmation qui servent vraiment).

[#4] Dans Reflections on Trusting Trust, Thompson explique qu'il avait introduit une backdoor dans le programme login, puis modifié le compilateur C pour introduire lui-même cette backdoor si elle ne s'y trouvait pas, puis pour introduire cette backdoor dans le compilateur C lui-même, si bien qu'au final il pouvait recompiler le compilateur avec les sources d'origine et la backdoor persistait dans le binaire. Voilà quelque chose qui, au minimum, ne doit pas surprendre un ingénieur en sécurité informatique.

↑Entry #2791 [older| permalink|newer] / ↑Entrée #2791 [précédente| permalien|suivante] ↑

↓Entry #2784 [older| permalink|newer] / ↓Entrée #2784 [précédente| permalien|suivante] ↓

(dimanche)

La réalisabilité propositionnelle, et ce qu'elle nous apprend sur les algorithmes

Je veux ici de nouveau parler d'informatique théorique, dans son intersection avec les maths (logique, calculabilité, typage), et plus précisément d'un sujet appelé la réalisabilité propositionnelle. Je reconnais qu'il a un petit côté « opération de pub » de ma part : il s'agit d'un sujet qu'on peut qualifier d'obscur, voire ésotérique (largement confiné à une poignée de publications soviétiques des années 1960–1990, dont certaines n'ont même pas été traduites du russe en quoi que ce soit d'autre[#], ce qui le dessert cruellement), et pourtant il me semble que d'une part il a des choses à nous apprendre sur l'informatique, sur ce que peut ou ne peut pas faire un algorithme, et sur le rapport entre ça et le typage, et d'autre part il n'est techniquement pas très compliqué à exposer (j'en ai dit un mot — bien moins que ce qui va suivre, certes — dans mon cours à Télécom qui s'est récemment fini, et je ne crois pas avoir largué tout le monde). Donc je trouve qu'il mérite plus d'attention.

[#] Bon, le fait que ce soit en russe ne devrait pas être un obstacle sérieux, surtout maintenant qu'on a des OCR et des traducteurs automatiques, il n'y a vraiment plus de raison. Le problème, c'est que souvent, et en plus d'être en russe, l'article a le défaut d'être super mal écrit : extrêmement concis et pas toujours super rigoureux comme les mathématiciens soviétiques avaient tendance à l'être, références vagues, et fautes de frappe à foison. (Voyez par exemple cette question que j'ai posée sur MathOverflow en essayant de comprendre l'argument de Ânkov sur la non-réalisabilité de l'axiome de Scott que j'expose plus bas ici de façon, j'espère, nettement plus clair que le texte original : mon russe est enfoui au fond des oubliettes, mais ce n'est vraiment ce qui était le plus problématique en l'occurrence par rapport aux fautes de frappe et au style de rédaction vraiment minimaliste.)

Je ne sais pas si l'entrée de blog qui va suivre peut aider à convaincre qui que ce soit de s'y réintéresser, mais en tout cas, si on lit ce qui suit on pourra se dire qu'on sait une proportion significative de tout le savoir de l'Humanité sur la réalisabilité propositionnelle (i.e., pas grand-chose !), et il n'y a pas beaucoup de sujets techniques pour lesquels on puisse en dire autant.

Ajout () : Pour les gens qui veulent savoir de quoi ce billet cause mais qui n'ont pas la patience de lire ce pavé (ni même l'introduction), j'ai écrit un résumé en seulement 13 tweets, ici sur Twitter et ici sur BlueSky [on peut lire le fil BlueSky sans avoir de compte dessus].

Table des matières

Résumé et publicité préalable

Avant de rentrer dans le cœur du sujet, j'essaie d'expliquer informellement[#2] (et de manière — j'espère — assez peu technique) de quoi il s'agit, et pourquoi je pense que c'est assez intéressant pour prendre le temps de déchiffrer des articles à moitié oubliés dans des journaux soviétiques et de pondre un pavé de 1729 pages dans ce blog pour réexpliquer le tout aux enfants. (Si on veut passer directement à la définition, c'est possible, mais je pense que c'est intéressant de donner d'abord une idée grossière de ce dont je vais parler, au risque de prendre un peu un ton introduction de manuscrit de thèse. Je remercie d'ailleurs mes peluches pour leur soutien et leur patience tout au long de l'écriture de cette entrée.)

[#2] Autrement dit, comme le corps de cette entrée est très long, je commence par une introduction très longue pour essayer de motiver cette longueur. Je n'ai fait celle-ci plus longue que parce que je n'ai pas eu le loisir de la faire plus courte. (Blaise Pascal)

Introduction : de quoi s'agit-il ? Cadre et motivations

La calculabilité s'intéresse à décrire de façon générale ce que peut ou ne peut pas faire un algorithme informatique. La réalisabilité propositionnelle s'intéresse (du moins selon le point de vue que j'adopte ici) spécifiquement à certaines sortes de manipulations que je pourrais être qualifier de manipulations de données génériques (ou abusivement, fonctions polymorphes). On va décrire ces manipulations génériques par des formules logiques, du style ABBA (logiquement, celle-ci se lit : si A et B alors B et A). La formule représente une sorte de « contrat » qui stipule la manipulation censément effectuée : par exemple, la formule ABBA représente le contrat je prends une donnée de type A et une donnée de type B et je renvoie une donnée de type B et une donnée de type A (et on peut faire ça algorithmiquement, de façon à peu près évidente, en échangeant les deux données qu'on a reçues). Lorsqu'il y a un algorithme qui remplit le contrat, on dira qu'il réalise la formule, ou que celle-ci est réalisable.

Je donnerai une définition précise plus bas de comment lire la formule comme un contrat et ce que ça signifie de la réaliser, mais je peux tout de suite donner un aperçu informel : on s'intéresse à des formules écrites avec les connecteurs binaires ‘∧’, ‘∨’ et ‘⇒’, ainsi que les constantes ‘⊤’ et ‘⊥’ (et ‘¬’ qui est juste une abréviation de X⇒⊥). Les variables (A,B dans l'exemple que je viens de donner) représentent des types de données quelconques et non spécifiés, et les connecteurs logiques représentent des façons de mettre ces données ensemble : grosso modo,

  • AB (le « et » logique) représente la donnée d'une donnée de type A et d'une de type B,
  • AB (le « ou » logique) représente la donnée d'une donnée de type A ou d'une de type B (mais avec l'information de laquelle on a),
  • AB (l'implication) représente une fonction (au sens informatique) qui prend une donnée de type A et en renvoie une de type B,
  • ⊤ (le « vrai ») représente une donnée triviale, et ⊥ (le « faux ») représente une donnée impossible (inexistante ou inobtenable),
  • ¬A (la négation) représente une promesse qu'il n'y a pas de A.

Ainsi, par exemple, pour faire une manipulation représentée par la formule (« contrat ») ABBA, on prend une donnée de type A et une donnée de type B et on les renvoie dans l'ordre contraire, c'est-à-dire la donnée de type B et la donnée de type A, et on pourra dire que la formule ABBA est réalisable (et que ce programme la réalise, i.e., il « remplit le contrat »).

J'ai utilisé le terme type ci-dessus, mais il n'est peut-être pas vraiment approprié, parce que justement, la réalisabilité ce n'est pas pareil que le typage, même si ça y ressemble beaucoup (et c'est la différence qui est très intéressante). Je m'explique un peu plus.

Il y a un formalisme appelé correspondance de Curry-Howard (j'en ai parlé dans un billet précédent, dont il est peut être intéressant de lire au moins l'introduction même si ce n'est pas strictement nécessaire pour la suite) qui transforme une démonstration d'une formule dans un certain système logique (le calcul propositionnel intuitionniste) en un programme qui fait la manipulation décrite par cette formule. Et le fait que ce programme fasse bien cette manipulation est attesté par ce qu'on appelle un système de typage, en l'occurrence le λ-calcul simplement typé enrichi de types produits et sommes, 1 et 0 mais peu importe : si on se limite aux programmes conformes à ce système de typage, alors la correspondance est exacte — je veux dire, bijective : on peut vraiment identifier les preuves de tel système logique avec les programmes conformes à tel système de typage. D'ailleurs, la correspondance n'est pas bien compliquée et fait vraiment correspondre de façon assez simple les différentes règles de la logique avec les différentes constructions admises par le système de typage.

Le système de typage (disons ce fameux λ-calcul simplement typé enrichi de types produits et sommes, 1 et 0), il contraint les programmes a priori : il les contraint dans toutes les étapes de leur construction, il exige que toutes les opérations qu'ils font soient conformes au typage. Et au bout du compte, les formules obtenues décrivant les manipulations qu'on peut faire, ce sont justement leurs types (à la notation près), et ce sont exactement les formules démontrables dans le système logique (c'est ça que dit la correspondance de Curry-Howard).

Mais ce n'est pas de ça que je veux parler. Ça c'est ce dont j'ai déjà parlé (dans la première partie du billet sur Curry-Howard).

La réalisabilité[#3], elle ne contraint pas les programmes a priori comme le fait le typage. Elle correspond à la philosophie suivante : le programme a le droit de faire ce qu'il veut comme manips (il faut juste que ce soit un algorithme au sens usuel de la calculabilité, celle de Church-Turing, l'idéalisation standard de ce que c'est qu'un ordinateur) et réaliser une formule ça signifie qu'il remplit un certain contrat. Peut-être qu'entre temps, au sein de leurs manips, les programmes violent toutes les règles du typage, mais au final, on demande juste qu'ils remplissent le contrat représenté par la formule : c'est le résultat qui compte, et seul le résultat qui compte. (Peut-être aussi qu'il est impossible de prouver que le programme remplit bien son contrat, mais ce qui importe c'est que mathématiquement il le fait : là aussi, c'est juste le résultat qui compte.)

[#3] Enfin, la réalisabilité propositionnelle que j'évoque ici, et qu'on peut qualifier de réalisabilité propositionnelle non typée pour insister, parce qu'il y a 1001 variantes de la notion (ce qui a causé un certain dialogue de sourds entre Andrej Bauer et moi dans cette question MathOverflow — sa réponse est très intéressante mais elle ne répond pas vraiment à la question que je voulais poser, quoiqu'elle réponde peut-être à la question que j'ai posée).

Par exemple, ABBA c'est le contrat tu vas recevoir deux données, la première de type A et la seconde de type B (et, précision importante, tu n'auras ni accès ni information sur ce que sont A et B), tu dois terminer en temps fini et renvoyer une donnée de type B et une donnée de type A, et effectivement on peut se convaincre que la seule façon de faire ça c'est d'échanger l'ordre des coordonnées.

Quand la formule est démontrable (en calcul propositionnel intuitionniste) ou, ce qui revient au même par Curry-Howard, quand on peut faire un programme typé correspondant à la formule, alors certainement ce programme remplit le contrat représenté par la formule, donc elle est réalisable.

Mais la grande surprise (en tout cas pour moi quand j'ai appris ça, mais aussi, de ce que je comprends, pour Kleene qui contrairement à moi n'était pas un idiot), c'est que la réciproque n'est pas vraie : il y a des contrats qu'on peut remplir — des formules qu'on peut réaliser — sans que la formule soit prouvable, ou, ce qui revient au même, sans qu'on puisse le faire dans le système de typage naturel dans cette situation (le λ-calcul simplement typé enrichi gnagnagna). Un des buts de ce billet est de donner des exemples de telles formules (jetez un coup d'œil plus bas si vous voulez voir à quoi ça ressemble).

Ces formules réalisables mais non démontrables illustrent donc, si on veut, des choses que peut faire un algorithme, remplissant un contrat de manipulation qui ressemble à du typage, mais qui ne sont pas faisables dans le cadre du typage — en tout cas du typage le plus naturel dans cette situation — ou, si on veut, ces choses sont faisables, mais la vérification que le contrat est bien rempli est plus compliquée qu'une vérification locale telle que fournie par le typage.

Bien sûr, il n'y avait aucun doute que les algorithmes généraux sont plus généraux que les algorithmes typés : notamment, les systèmes de typage que j'évoque dans cette introduction ne permettent pas de faire de boucle infinie, donc il est évident qu'ils limitent structuralement les algorithmes. Mais ce qui est surprenant dans l'histoire, c'est que l'algorithme va quand même remplir un contrat qui se lit exactement comme un type, i.e., ils font des manipulations de données génériques potentiellement utiles, pas quelque chose comme une boucle infinie ni même une fonction sur un type spécifique comme les entiers.

Je précise pour dissiper un possible malentendu que ce que je dis là n'est pas destiné à être une attaque contre le typage ou son utilité, juste un signe que les choses sont plus délicates que ce qu'on pourrait imaginer naïvement : certes Curry-Howard nous dit que les formules logiques qui correspondent à des programmes typés sont exactement les formules démontrables, mais il y a des contrats qu'on peut remplir de façon plus subtile que le typage.

Et du coup, il me semble que c'est un problème très naturel pour l'informatique et la calculabilité que d'étudier cette réalisabilité propositionnelle, parce que ça a directement trait à ce qu'un algorithme peut ou ne peut pas faire. (Notons que c'est là l'approche que je donne à la question dans ce billet, tout le monde ne sera pas forcément d'accord que c'est la bonne motivation.)

Organisation de ce billet

Dans la suite, je commence par définir de façon précise ce que c'est que la réalisabilité propositionnelle, et je donne des exemples très simples d'une formule réalisable (AB ⇒ BA) et d'une formule qui ne l'est pas (A ∨ ¬A) pour montrer comment on manie la notion. Ensuite je dois faire un certain nombre de remarques générales (plusieurs desquelles sont en petits caractères pour montrer qu'on peut les ignorer et passer à la suite).

Puis je me tourne vers des exemples de formules réalisables mais non démontrables, parce que c'est quand même ça la grosse surprise, que de telles formules existent : pour chacune, j'ai essayé de donner non seulement un algorithme qui la réalise (et comment il fonctionne) mais aussi des explications informelles à son sujet. En revanche, je ne détaille pas l'argument expliquant que la formule n'est pas démontrable (en calcul propositionnel intuitionniste) : il n'y a que la première pour laquelle j'ai fait cet effort, et encore succinctement et en petits caractères, parce que ce n'est pas vraiment mon sujet.

Je commence par la formule qui me semble la plus simple à comprendre intuitivement, celle de Ceitin, puis j'en passe en revue un certain nombre d'autres. On peut traiter ça comme autant d'énigmes : une fois qu'on a compris le principe, c'est un petit jeu de regarder chaque formule comme un contrat à remplir et de se demander comment je vais faire une telle chose avec un algorithme ? (en tout cas, c'est comme ça que j'ai approché le problème : je n'ai pas lu les preuves de réalisabilité qu'on trouve dans la littérature, c'était bien plus instructif de les retrouver moi-même).

Ensuite, je passe à des exemples de formules non réalisables mais intéressantes et notamment « presque » réalisables, à travers deux exemples importants : la formule de Kreisel-Putnam et celle de Scott. Donc cette fois il faut à la fois montrer qu'elles ne sont pas réalisables et que, pourtant, on ne passe pas loin de l'être (et j'explique en quoi elles sont « presque » réalisables, même si je n'ai pas réussi à avoir le recul pour comprendre si on peut définir cette notion proprement).

Enfin je finis par des généralités et spéculations peut-être vaseuses et certainement mal écrites, qui font un peu le pendant de l'introduction ci-dessus.

Pourquoi j'estime que c'est intéressant et important

Bien sûr, comme je l'explique ci-dessus, on peut traiter chacune des formules que je vais lister ci-dessous (aussi bien celles qui sont réalisables que celles qui ne le sont pas) comme un exercice de calculabilité : voici une formule représentant un certain contrat, trouver une façon de le remplir [= réaliser la formule] ou montrer que ce n'est pas possible ; ou même comme une sorte d'énigme (à la manière dont je l'ai fait ici et ). Les outils de base utilisés par ces algorithmes sont toujours un peu les mêmes, et ce sont les techniques fondamentales de la calculabilité : lancer deux tâches en parallèle (sachant qu'au moins une des deux terminera), exécuter un programme pour un certain nombre d'étapes pour voir s'il termine, parcourir tous les entiers naturels en sachant qu'on finira par en trouver un qui remplit une certaine condition — ce genre de choses qui sont les bases de la calculabilité de Church-Turing. Donc déjà c'est au moins intéressant parce que c'est instructif à ce niveau-là.

Mais je pense que ça va plus loin que ça. Comme je le dis plus haut, la réalisabilité propositionnelle est une façon d'aborder le problème, qui me semble central en informatique, de ce qu'un algorithme peut ou ne peut pas faire, et en l'occurrence il est important de comprendre ce que le typage laisse ou ne laisse pas passer, et comme le typage est un outil lui aussi central, comprendre ce qu'il ne laisse pas passer est justement une question cruciale, et même si on peut trouver que la réalisabilité propositionnelle est un prisme un peu étroit pour étudier cette question (j'en conviens), je pense qu'elle a des choses à dire, et je n'ai pas l'impression qu'on les comprenne bien dans l'état actuel de l'art (d'où le fait que les exemples de formules réalisables soient un peu… hétéroclites), mais ça vaut certainement la peine de méditer un peu sur chacune de ces formules certes disparates et de ce qu'elle signifie et ce qu'elle représente. En tout cas, ce n'est certainement pas un hasard si la réalisabilité de ces différentes formules fait appel à ce que je viens d'appeler les techniques fondamentales de la calculabilité.

En outre, ça nous apprend aussi — il me semble — des choses sur la richesse de la logique intuitionniste, même au niveau simplement propositionnel (en nous forçant à nous demander ce que disent logiquement certaines de ces formules qu'on n'aurait sans doute pas pensé à considérer sinon). Ma motivation à moi était justement de me familiariser mieux à la fois avec la calculabilité en général et avec les techniques à l'interface entre logique, calculabilité et typage : en réexpliquant chacune de ces preuves, je m'assure que je les ai bien comprises. (Et il y a plein de choses que j'ai été obligé de revoir en écrivant ce billet.)

↑Entry #2784 [older| permalink|newer] / ↑Entrée #2784 [précédente| permalien|suivante] ↑

↓Entry #2782 [older| permalink|newer] / ↓Entrée #2782 [précédente| permalien|suivante] ↓

(vendredi)

Mélanges probabilistes et superpositions quantiques

Précisions d'emblée que le but de ce billet, qui évoque le rapport entre (pour prendre un exemple célèbre) un chat vivant avec probabilité ½ et mort avec probabilité ½ (« mélange probabiliste ») et un chat dans un état quantique qui combine vivant et mort (« superposition quantique ») n'est pas vraiment de faire de la vulgarisation, encore moins de la physique. Je m'en sers, comme je fais parfois, surtout pour gribouiller rapidement ce que j'ai (moi matheux) réussi à comprendre de textes que je trouve souvent obscurs, et pour noter des questions que je (me) pose si je veux y réfléchir plus attentivement Un Jour™, mais ça ne signifie pas que d'autres trouveront mes explications plus claires que ce qu'on peut trouver ailleurs. Il s'agit essentiellement de choses très classiques, mais que je trouve généralement très mal expliquées (notamment par le fait qu'on prend rarement le soin d'essayer de décrire le parallèle entre mélanges probabilistes et superpositions quantiques séparément avant de dire comment ces deux choses se combinent), quoique certaines des questions que je soulève au passage n'ont pas l'air d'être beaucoup discutées, et c'est dommage.

Quoi qu'il en soit, ce qui suit s'adresse à des lecteurs qui savent au moins un peu d'algèbre linéaire (en gros, pour qui les mots espace de Hilbert ont un sens — je ne parlerai que de la dimension finie donc on peut préférer espace hermitien), et sont globalement familiers avec le fait qu'une matrice hermitienne est diagonalisable. Et encore une fois, mon point de vue va être celui d'un matheux, pas d'un physicien (témoin le fait que je vais à peine évoquer de lois de la physique) : la question est celle de la représentation mathématique d'états d'un système physique. (Et j'en profite pour pointer du doigts certains faits géométriques sur cette représentation.) Mais au passage, ça soulève des questions, qui me semblent intéressantes, sur la philosophie de la physique (notamment que signifient les probabilités, et dans quelle mesure elles font partie de la réalité du monde).

Je dois aussi préciser que j'ai changé plein de fois d'avis sur ce que je voulais raconter ici, que j'ai fait mon plan a posteriori et que j'ai réécrit plein de fois des passages sans vérifier la cohérence avec ce qui était déjà ailleurs, ce qui explique sans doute des virages un peu bizarres, des redites ou incohérences de propos et des digressions inutiles (comme d'habitude, j'essaie de rédiger de manière à ce qu'on puisse les sauter, mais je ne sais pas dans quelle mesure j'y arrive). Par ailleurs, comme ça m'arrive souvent, j'ai écrit ce texte jusqu'au point où j'en ai eu marre de l'écrire, ce qui explique qu'après être parti dans toutes les directions il s'arrête un peu brutalement et sans vraie conclusion — mais je pense que mes lecteurs (enfin, ceux qui sont assez patients pour lire mes billets jusqu'au bout) ont l'habitude de ça.

Plan

Mélanges probabilistes et superpositions quantiques séparément

Comme promis, je commence comme un matheux. Supposons que A soit un ensemble, que je vais prendre fini pour simplifier et que j'imagine comme les états basiques que peut prendre un système physique.

Mon but est dans un premier temps de définir deux types de constructions[#] qu'on peut faire sur cet ensemble A, que je vais ensuite comparer et contraster, et que je vais appeler mélanges probabilistes et superpositions quantiques ; puis, dans la suite, je discuterai comment on peut les combiner.

[#] Techniquement, j'imagine qu'on doit pouvoir faire de chacune de ces constructions une monade, mais je ne veux pas tomber dans ce trou de lapin-là.

Mélanges probabilistes

Si je ne sais pas exactement dans quel état se trouve mon système, je peux représenter mon ignorance sous la forme d'une distribution de probabilités sur A : concrètement, ça va prendre la forme d'une fonction de A vers les réels positifs (donnant la probabilité de chaque état) dont la somme totale est 1. De façon équivalente, si je note [a], lorsque aA la fonction qui vaut 1 en a et 0 ailleurs (i.e., la distribution de probabilités concentrée en a), une distribution de probabilités p quelconque sur A s'écrit comme une combinaison convexe des [a], c'est-à-dire une combinaison linéaire à coefficients positifs de somme 1 (les coefficients étant justement la probabilité p(a) de chaque a, i.e., on a p = ∑aA p(a) · [a], avec, je répète, p(a)≥0 pour chaque a, et ∑aA p(a) = 1). Je parlerai aussi de mélange probabiliste des éléments de a pour une telle combinaison convexe.

À titre d'exemple, si A = {vivant, mort} désigne les deux états possibles de vie d'un chat, le mélange probabiliste ½([vivant] + [mort]) désigne un chat qui a 50% de chances d'etre vivant et 50% de chances d'être mort.

Géométriquement, il faut penser à cet ensemble de distributions de probabilités / combinaisons convexes / mélanges probabilistes (selon le terme qu'on préfère) comme un simplexe dont les sommets sont les éléments de A (i.e., lorsque A a 2 éléments, c'est un segment les reliant, quand il en a 3 c'est un triangle ayant ces sommets, quand il en a 4 c'est un tétraèdre, etc.) ; et les coordonnées barycentriques dans le simplexe sont les valeurs p(a) de la distribution de probabilités p considérée.

Je n'ai rien dit d'intelligent, ou même d'intéressant dans tout ça : c'est complètement standard, c'est juste différents points de vue un tout petit peu différents sur la même chose.

Superpositions quantiques

Maintenant, quand on fait de la mécanique quantique, il y a autre chose qui intervient, et qu'il faut bien distinguer de ce qui précède : ce sont les superpositions quantiques. Cette fois, je vais considérer un espace vectoriel complexe[#2], et même hilbertien (= hermitien), dont une base orthonormée est formée de vecteurs notés |a⟩ où aA, et je m'intéresse aux vecteurs de norme 1 dans cet espace (éventuellement : modulo la phase, c'est-à-dire modulo multiplication par les complexes de module 1, ce qui en fait un « espace projectif » complexe, cf. ici). Autrement dit, les éléments de l'espace sont les ∑aA u(a) · |a⟩ avec u(a) des nombres complexes et ∑aA |u(a)|² = 1 ; le produit scalaire hermitien de deux tels éléments |u⟩ := ∑aA u(a) · |a⟩ et |v⟩ := ∑aA v(a) · |a⟩ est donné par ⟨u|v⟩ := ∑aA u(a)* · v(a) où z* désigne ici le conjugué d'un nombre complexe (normalement noté avec une barre au-dessus, mais c'est pénible à faire en HTML) (j'ai pris ici la convention des physiciens selon laquelle le produit scalaire hermitien est antilinéaire dans sa première variable et linéaire dans la seconde). La notation suggère de définir ⟨a| comme la forme linéaire valant 1 en |a⟩ et 0 sur tous les autres |b⟩, si bien que le produit scalaire par ∑aA u(a) · |a⟩ à gauche s'écrit comme la forme linéaire ∑aA u(a)* · ⟨a|. Bon, là je n'ai rien dit d'intelligent.

[#2] Le fait qu'on ait apparemment nécessairement affaire à des coefficients complexes, quel que soit le système physique décrit, me laisse un peu perplexe, et apparemment je ne suis pas le seul.

Pour reprendre l'exemple précédent, si A = {vivant, mort} désigne les deux états possibles de vie d'un chat, alors (|vivant⟩ + |mort⟩)/√2 désigne un chat dans un état quantique qui superpose ces deux états. Mais on notera que (|vivant⟩ − |mort⟩)/√2 est aussi un tel état, qui semble très analogue, mais qui est orthogonal au précédent comme on le voit en calculant le produit hermitien (et on peut légitimement se demander ce que tout ça veut dire). Et de même, (|vivant⟩ + i·|mort⟩)/√2 et (|vivant⟩ − i·|mort⟩)/√2 devraient avoir un sens et être orthogonaux l'un à l'autre (quoique pas aux précédents). Ceci étant dit, autant c'est rigolo de donner mes exemples avec des chats vivants ou morts ou en superposition quantique entre les deux, ce n'est peut-être pas un très bon exemple[#3][#3b], en fait, justement à cause de la difficulté de donner un sens à ces états que je viens d'écrire, donc dans la suite je vais passer à un exemple plus abstrait du genre A = {0,1}, c'est-à-dire les états basiques de ce qu'on appelle un qubit : vous pouvez imaginer ‘0’ et ‘1’ comme signifiant qu'un chat est vivant et mort si vous voulez, mais si vous voulez des exemples physiquement plus plausibles, l'article Wikipédia que je viens de lier a divers exemples, et je vais juste dire un mot de deux d'entre eux dans les paragraphes suivants.

[#3] Je ne sais plus qui me faisait le reproche je ne sais où d'utiliser le chat de Schrödinger comme exemple de superposition quantique, alors que c'est justement un exemple censé illustrer le doute qu'on peut avoir sur l'existence ou le sens de superpositions quantiques sur des objets macroscopiques. Si on croit la mécanique quantique jusqu'au bout, et notamment si on croit sa linéarité exacte, alors oui, on peut faire des superpositions quantiques macroscopiques, et même c'est ce qui arrive à l'Univers tout entier dès qu'on fait une « mesure », et il y a toutes sortes de tentatives d'explications, ou de bouts d'explications (décohérence, interprétation « multi-mondes » d'Everett-DeWitt) sur pourquoi on ces superpositions ne se manifestent pas de façon visible dans notre expérience quotidienne. Mais mon but ici n'est pas vraiment de parler de ces choses-là (même si je ne peux pas faire l'économie d'au moins une mention au passage — dont acte ; cf. aussi la note #8 plus bas).

[#3b] Ajout () : Bien sûr, le problème avec le chat, ce n'est pas juste qu'il est macroscropique, c'est qu'il a bien plus d'états que {vivant, mort} : il y a peut-être quelque chose comme 101027 états qualifiables de vivant et de mort. En quoi ceci est vraiment pertinent pour toute la discussion n'est pas clair pour moi, ni si on choisit de les regrouper en deux paquets (i.e., de fabriquer deux sous-espaces de grande dimension) ni si on décide d'en choisir un très particulier dans chaque paquet (mais je note quand même que, par un phénomène de concentration de la mesure, si on choisit un état vivant au hasard et un état mort au hasard, ils seront essentiellement orthogonaux — donc au moins ça justifie de travailler avec comme des états basiques).

À titre d'exemple de qubit, il y a la polarisation d'un photon : si |↺⟩ représente un photon polarisé circulairement d'hélicité droite[#4] et |↻⟩ un photon polarisé circulairement d'hélicité gauche, alors (|↺⟩ + |↻⟩)/√2 et (|↺⟩ − |↻⟩)/√2 peuvent représenter des photons respectivement polarisés horizontalement et verticalement[#5][#6], tandis que (|↺⟩ + i·|↻⟩)/√2 et (|↺⟩ − i·|↻⟩)/√2 peuvent en représenter de polarisations diagonales.

[#4] Comme bien expliqué sur Wikipédia, il y a deux conventions opposées sur ce qu'une polarisation circulaire horaire ou anti-horaire signifie, selon qu'on prend le point de vue de la source qui voit l'onde partir ou de la cible qui voit l'onde arriver. Par contre, l'hélicité, il me semble que ça devrait être inambigu : on met le pouce (droit ou gauche, selon qu'on parle d'hélicité droite ou gauche) dans le sens de propagation de l'onde et en courbant les autres doigts ils indiquent dans quel sens l'onde tourne autour de son sens de propagation. Donc pour moi, hélicité droite = sens anti-horaire (= trigonométrique) vu par la cible = sens horaire (= rétrograde) vu par la source, tandis que hélicité gauche = sens horaire (= rétrograde) vu par la cible = sens anti-horaire (= trigonométrique) vu par la source. (Et les petits dessins ‘↺’ et ‘↻’ que j'utilise évoquent ce que voit la cible.) Mais apparemment, toujours si j'en crois Wikipédia, des gens ont aussi réussi à mélanger les conventions gauche/droite, et là je ne comprends pas comment ils ont pu faire un truc pareil. Enfin bon, tout ça n'a aucune importance pour ce que je veux raconter ici.

[#5] Là aussi, on trouve des conventions contradictoires, bien sûr, mais la convention moderne semble être de dire qu'une onde se propageant horizontalement a une polarisation horizontale par référence à la direction du champ électrique oscillant : le champ magnétique, lui, oscille dans une direction perpendiculaire au champ électrique et au vecteur de propagation de l'onde, donc verticalement pour une onde de polarisation horizontale.

[#6] Mathématiquement, imaginez que |↺⟩ est la fonction exp(2iπν·t) où ν est la fréquence du photon et t est le temps retardé par la distance depuis la source, et le composantes réelle et complexe sont, disons, les composantes horizontale et verticale du champ électrique ou quelque chose comme ça, tandis que |↻⟩ est exp(−2iπν·t) ; alors (|↺⟩ + |↻⟩)/√2 et (|↺⟩ − |↻⟩)/√2 décrivent les fonctions cos(2πν·t) et i·sin(2πν·t) respectivement.

La raison pour laquelle je précise l'exemple du paragraphe précédent est pour souligner que ces états en superposition quantique sont parfaitement valables (je vais dire ci-dessous que, contrairement à la situation probabiliste, il n'y a rien d'objectif qui distingue les états basiques que j'ai choisis des autres états fabriqués par combinaisons linéaires de ceux-ci : le fait qu'un état soit « superposé » n'a pas de sens en soi), et ça se voit bien sur cet exemple-là : les polarisations circulaires n'ont rien de plus naturel que les polarisations horizontales/verticales ou diagonales. Par ailleurs, on se dit que ce sont des choses qui ont un vrai sens physique, pas des expressions de notre ignorance.

J'ai évoqué les photons ci-dessus pas juste pour le plaisir d'utiliser les caractères ‘↺’ et ‘↻’, mais aussi parce que je pense que c'est raisonnablement simple à comprendre — modulo les prises de tête sur les conventions contradictoires quant au sens de la polarisation — mais on peut aussi dire un mot du qubit décrivant le spin de l'électron au repos. Là les deux états basiques pourraient être |↑⟩ et |↓⟩ représentant un électron avec un spin dirigé vers le haut ou vers le bas respectivement : alors (|↑⟩ + |↓⟩)/√2 et (|↑⟩ − |↓⟩)/√2 peuvent représenter un électron avec un spin dirigé vers la droite et la gauche respectivement, tandis que (|↑⟩ + i·|↓⟩)/√2 et (|↑⟩ − i·|↓⟩)/√2 peuvent en représenter un avec un spin dirigé vers l'avant et l'arrière respectivement[#7].

[#7] Le lecteur astucieux me demandera mais ça dépend très hautement du fait que l'espace est de dimension 3, ça : que se passe-t-il en d'autres dimensions ? — et, en effet, c'est une particularité de la dimension 3 que l'état de spin d'une particule de spin ½ soit représenté par un qubit. En général, en dimension d le spin d'une telle particule devrait avoir 2d/2⌋ états basiques (c'est la dimension de la représentation spinorielle du groupe Spind ; je ne sais d'ailleurs pas comment Wikipédia réussit à cacher cette information aussi efficacement dans la page que je viens de lier), c'est-à-dire l'équivalent de ⌊d/2⌋ qubits. Donc, oui, c'est particulier à la dimension 3 qu'on puisse décrire ça aussi simplement que vers le haut et vers le bas. Pour la polarisation du photon, il me semble que c'est d−1 états basiques (donc, en grande dimension, il y a beaucoup moins d'information dans le spin d'un photon que d'un électron, vous interprétez ça comme vous voulez).

Ressemblances et différences entre les deux

Il y a des ressemblances entre mélange probabiliste et superposition quantique, et j'ai fait exprès de choisir une description analogue avec des combinaisons linéaires pour faire ressortir ces ressemblances (et je regrette que toute description de la mécanique quantique ne commence pas par une telle discussion). Il y a aussi des différences cruciales, à la fois physiques et mathématiques.

↑Entry #2782 [older| permalink|newer] / ↑Entrée #2782 [précédente| permalien|suivante] ↑

↓Entry #2780 [older| permalink|newer] / ↓Entrée #2780 [précédente| permalien|suivante] ↓

(jeudi)

Sur la notion d'« étendue » en optique et en géométrie

Je voudrais essayer de parler ici d'un concept de géométrie (euclidienne), notamment important pour son application en optique, que je trouve à la fois joli pourtant trop peu connu[#] : celui d'« étendue ». En gros, l'étendue est une façon de mesurer la taille d'un ensemble de droites (disons, dans l'espace) de la même manière que le volume est une façon de mesurer la taille d'un ensemble de points. Mais pour commencer, et pour expliquer une façon dont cette notion apparaît, je veux parler des unités et grandeurs lumineuses que sont le lumen, le lux, la candela et la candela par mètre carré, et le lien entre ces unités, et ce qu'elles nous disent. Parce que même le grand public commence à avoir entendu parler des lumens (c'est écrit sur toutes les boîtes d'ampoules, de nos jours), et peut-être de lux (pour le niveau d'éclairement d'une pièce), mais ne sait pas forcément la différence entre les deux (divulgâchis : un lux, c'est un lumen par mètre carré).

[#] À titre d'exemple, je n'en vois pas de trace dans les programmes de classes préparatoires scientifiques françaises, ce que je trouve un peu surprenant. Et ce n'est pas une évolution récente parce que je ne crois pas qu'on m'en ait parlé quand j'étais moi-même en prépa.

La difficulté de l'exercice, c'est que comme je veux parler de divers concepts (l'étendue en géométrie euclidienne, l'étendue en optique géométrique, les unités de mesure photométriques, et quelques conséquences de tout ça) et ce à différents niveaux de vulgarisation, je mais certainement faire de la bouillie. En plus de ça, je suis infoutu de faire le moindre dessin, ce qui n'aide pas pour expliquer un concept éminemment géométrique.

Mais voilà, essayons quand même (bear with me), parce cette histoire de conservation de l'étendue est quelque chose qui me semble important pour comprendre les bases de l'optique, et c'est aussi un concept mathématique pas compliqué mais néanmoins digne d'être noté. Et j'en ai marre de toujours oublier ces choses, alors ce billet de blog est surtout un aide-mémoire pour moi-même.

*

☞ La « luminosité » décroît-elle avec la distance ? (Oui et non.)

Pour commencer, une observation toute simple qui me fascine depuis que je suis petit, qui n'est pas difficile à comprendre, et qui renferme l'essence de cette notion de conservation de l'étendue.

Considérez le Soleil, vu depuis la Terre, en plein jour (et par beau temps). Ne le regardez surtout pas directement, c'est très dangereux pour vos yeux (Newton a failli se rendre aveugle comme ça). Oui mais pourquoi est-ce si dangereux, au juste ? Parce que le Soleil est très brillant, bien sûr. Certes, mais il est aussi très loin : est-ce que la luminosité ne s'atténue pas avec la distance ? Après tout, l'étoile Sirius (enfin, Sirius A), qui est 23 fois plus lumineux que le Soleil mais 540 000 fois plus loin de nous, ne nous aveugle pas quand nous la regardons directement. Alors, oui et non : ça dépend surtout de ce qu'on appelle luminosité.

D'abord, il y a une absorption de la lumière par l'atmosphère terrestre, qui atténue surtout le bleu et l'ultra-violet. C'est important pour rendre le Soleil moins dangereux pour nous, mais ce n'est pas de ça que je veux parler, donc faisons comme si elle n'existait pas. Ensuite, il y a effectivement une décroissance de la luminosité avec la distance (quadratique : si on est 2 fois plus loin d'une étoile, elle apparaît 4 fois moins lumineuse), mais cette décroissance correspond précisément à une décroissance de la taille apparente (ou « angle solide ») de l'étoile : si on va 2 fois plus loin du Soleil, il apparaîtra 2 fois plus petit dans chaque direction, donc 4 fois plus petit en surface apparente (« angle solide »), et sa luminosité sera 4 fois plus faible juste pour cette raison, c'est-à-dire que la luminosité par unité d'angle solide (ou luminance) sera la même.

Quand l'objet qu'on regarde est suffisamment petit pour qu'il n'en reste qu'un seul point (on dit qu'il n'est pas « résolu optiquement »), on ne voit plus l'angle solide, et tout ce qui compte est la luminosité totale qu'on en reçoit[#2] (dont je vais dire qu'elle s'appelle correctement éclairement et se mesure en lux) ; mais si l'objet est de taille visible, ce qui est le cas du Soleil, alors ce qui compte est cette luminosité par angle solide (appelée luminance, et mesurée en lux par stéradian, ou ce qui revient au même, en candelas par mètre carré), et elle ne change pas avec la distance.

[#2] Je ne sais pas si je l'ai déjà raconté ici, mais depuis que je suis petit, quand je suis passager dans une voiture la nuit, j'aime parfois jouer à retirer mes lunettes. Comme je suis très très myope, chaque feu de véhicule devient alors une grosse tache (en gros l'image de mon cristallin qui, vu que c'est la nuit, est bien ouvert) : c'est très joli et assez poétique, ça fait une sorte de ballet hypnotisant de taches de couleurs rouges, orange et blanches. Ce qui est perturbant, c'est que la taille de ces taches ne change pas quand le véhicule s'éloigne, puisqu'elle est avant tout due à l'imperfection optique de mon œil : l'éloignement se manifeste non pas par une diminution de la taille mais par une diminution de la luminosité de la tache. C'est ce que j'appelle une situation non résolue optiquement. C'est pareil pour n'importe qui quand on regarde une étoile, mais dans mon cas les taches sont vraiment très grosses (d'ailleurs, du coup, sans mes lunettes, je ne peux absolument pas voir la moindre étoile).

En bref, si vous étiez deux fois plus loin du Soleil, ce serait tout aussi dangereux pour vos yeux de le regarder directement et fixement : la surface de la rétine qui se ferait endommager serait plus petite, mais la surface qui serait endommagée le serait tout autant. (Bon, il y a plein de petits caractères à ajouter là : par exemple pour rappeler que je parle de regarder fixement pendant une certaine durée, parce que les yeux bougent toujours un peu tout le temps, ce qui aide justement à nous protéger contre le soleil.)

Inversement, en principe, même si vous étiez à cent mètres de la surface du Soleil, cette surface vous apparaîtrait aussi brillante (absorption atmosphérique mise à part) que ce que vous en voyez depuis la Terre — c'est juste que ça occuperait la moitié de votre champ visuel au lieu d'être un tout petit truc (de 68 microstéradians) dans le ciel. (Bon, bien sûr, à 100m du Soleil vous auriez plein de problèmes, et je déconseille très fortement d'y aller.)

Et ça, quand j'étais petit, ça me fascinait profondément, de me dire que nous voyons le Soleil vraiment lumineux comme il est, juste plus petit.

*

☞ Flux lumineux, éclairement, intensité lumineuse, et luminance

Bon, mais dans tout ça j'ai utilisé le terme de luminosité de façon très vague. Essayons d'être plus clair, en distinguant quatre notions, et en expliquant comment elles se relient et quelles sont les unités qui les mesurent (si vous trouvez ça trop verbeux, j'ai mis un résumé à la fin) :

  • La première, c'est la notion de flux lumineux, qui est mesuré en lumens (symbole : lm) dans le Système International. C'est analogue à la puissance lumineuse, c'est-à-dire la quantité d'énergie par unité de temps : donc c'est analogue à des watts (symbole : W).

    Je dis analogue, parce qu'un lumen n'est pas un watt : le lumen reflète le fait que notre œil est plus ou moins sensible à différentes parties du spectre électromagnétique, donc qu'on ne voit pas 1W dans le vert autant que 1W dans le rouge ou le bleu, et si c'est 1W dans l'ultraviolet ou l'infrarouge on ne le voit pas du tout : donc le lumen tient compte de cette différence de sensibilité en pondérant la puissance des différentes longueurs d'onde en fonction de la sensibilité de l'œil humain (mais à cette pondération près, c'est comme des watts).

↑Entry #2780 [older| permalink|newer] / ↑Entrée #2780 [précédente| permalien|suivante] ↑

↓Entry #2778 [older| permalink|newer] / ↓Entrée #2778 [précédente| permalien|suivante] ↓

(dimanche)

Réflexions à 2 femtozorkmids sur l'informatique en tant que science

Les quelques derniers billets de ce blog qui avaient un contenu scientifique (notamment celui-ci et celui-ci) tournaient autour de l'informatique théorique. (Et je compte en écrire encore plusieurs.) Je ne sais pas si le lecteur non spécialiste aura vu la différence avec des maths. Je ne sais pas si je vois une différence avec des maths. Après tout, j'ai rangé ces billets dans la catégorique « maths » (pas que le mécanisme de catégories sur ce blog serve à quoi que ce soit, et c'est peut-être surtout que j'avais la flemme de créer une nouvelle catégorie, mais quand même, c'est une info) ; alors que par le passé, j'ai écrit des entrées sur la physique théorique (comme celle-ci ou celle-là) et je les ai rangées dans une catégorie différente. Peut-être même qu'avec assez de mauvaise foi on pourrait prétendre que la correspondance de Curry-Howard affirme qu'il n'y a pas de différence entre maths et info (mais soyons clairs, ça demande une bonne dose de mauvaise foi, justement).

Ce n'est pas la première fois que je médite sur cette question à laquelle je n'ai pas vraiment de réponse : qu'est-ce que c'est que l'informatique ? — et secondairement, quelle position a-t-elle par rapport aux maths ? et cette position est-elle analogue à celle de la physique ?

(Je précise que ce billet, qui est une méditation décousue et sans véritable point d'arrivée, se veut non-technique, i.e., lisible par tout le monde, mais que fatalement je vais être amené à faire des remarques techniques çà et là : si on ne sait pas de quoi je parle, on peut juste ignorer ces passages, ils ne sont là que pour appuyer ou illustrer mes propos, ils n'en sont pas le cœur. Si vous n'avez vraiment pas le temps de lire, regardez au moins le dernier paragraphe pour un résumé de ce que j'essaie de dire.)

☞ Science informatique et génie informatique

Mettons-nous d'accord sur le fait que je parle de l'informatique en tant que science : computer science en anglais, par opposition à computer engineering, ce dernier étant le génie informatique (lui-même au sens d'ingénierie, pas au sens du fait d'être génial…), comme on peut parler de la physique comme science par opposition au génie mécanique / électrique / électronique / etc. Mais la frontière entre la science et le génie n'est pas super claire non plus, et peut-être que ça fait aussi partie de la question : en première approximation, une science est une discipline qui cherche à élargir nos connaissances tandis que le génie cherche à appliquer des connaissances pour résoudre des problèmes, mais évidemment ce n'est pas toujours net, et il y a des sciences appliquées (que je range quand même parmi les sciences) qui montrent que la limite est assez floue.

Néanmoins, j'aime bien souligner que ce n'est pas parce qu'une limite est floue qu'elle n'existe pas : entre l'étude des modèles du λ-calcul et l'optimisation d'un jeu vidéo il y a bien une différence d'approche, ce qui se mesure ne serait-ce qu'empiriquement au modèle économique qui paye les gens qui font l'une et l'autre activité, et il me semble que cette différence est assez analogue à celle entre, pour ce qui est de la physique, l'étude de la théorie des solutions exactes de l'équation d'Einstein et l'optimisation d'un moteur de moto. (Et je devance l'accusation qu'il y aurait là un jugement de valeur de ma part : d'une part je mets ma vie entre les mains des gens de chez Yamaha qui conçoivent des moteurs de moto, d'autre part j'avoue platement que programmer un jeu vidéo ou concevoir un moteur de moto est quelque chose qui me semble complètement hors de mes capacités à la différence de l'étude des solutions exactes des équations d'Einstein ou des modèles du λ-calcul, que j'ai au moins pratiquées de loin.)

Alors maintenant, si la physique est l'étude du monde matériel, ou quelque chose qui y ressemble, l'informatique, c'est quoi ?

☞ L'informatique n'est pas la science des ordinateurs

La réponse la plus évidente serait que c'est la science des ordinateurs. À ça il faut répondre par une citation souvent attribuée à Dijkstra, mais comme toutes les meilleures citations sont apocryphes, elle n'est probablement pas de lui :

Computer science is no more about computers than astronomy is about telescopes.

Les ordinateurs ne sont que le moyen d'étude de l'informatique, en même temps que son application : ils ne sont pas son objet.

Le grand public a peut-être dans l'idée qu'un chercheur en informatique cherche à rendre les ordinateurs plus rapides. (Bon, à vrai dire, le grand public a peut-être dans l'idée qu'un chercheur en informatique est un pro en Excel ou sait réparer une imprimante qui dysfonctionne, et ce sont des idées à ranger avec celle du mathématicien comme quelqu'un qui passe ses journées à faire des calculs immensément compliqués : juste naïves, mais révélatrices d'un triste manque d'information sur le fonctionnement de la science.) Ce n'est pas complètement faux, bien sûr, il y a des informaticiens qui cherchent effectivement à rendre les ordinateurs plus rapides. D'autres qui cherchent à les rendre plus sûrs. Mais ce sont un peu les arbres qui cachent la forêt.

Bon, mais alors c'est quoi, l'objet de l'informatique, si ce n'est pas les ordinateurs ?

À vrai dire je ne sais pas bien quoi répondre. Ma première approximation de la réponse (peut-être désespérément vague) serait : l'informatique est la science de l'information, des données, de la communication, de l'automatisation et du calcul.

☞ La physique et l'informatique vis-à-vis des maths

L'ennui, si on dit ça, c'est que ça ressemble beaucoup à des maths. Bon, à ce stade, il faut peut-être aussi que je tente de définir les maths, et je suis tout autant embarrassé : c'est essentiellement aussi naïf de s'imaginer que les maths sont la science des nombres que que l'informatique est celle des ordinateurs, mais là aussi, on est en droit de se demander de quoi elles sont l'étude, alors. Je dirais bien l'étude des structures abstraites, mais on m'objectera que ça ressemble trop à la philosophie, ça. En tout cas, l'information, les données, la communication, l'automatisation et le calcul, ça ressemble beaucoup à des notions abstraites que les maths pourraient étudier. Et de fait, il y a une intersection énorme entre les maths et l'informatique théorique ; mais intersection ne signifie pas inclusion c'est un peu le cœur de mon propos.

Peut-être parce qu'elle est née plus récemment que la physique, l'informatique semble avoir une crise identitaire vis-à-vis des mathématiques un peu plus compliquée que celle de la physique. Crise identitaire qui peut signifier qu'elle tarde à prendre son indépendance, ou au contraire prendre la forme d'une volonté excessive de « tuer le père ».

Je pense qu'informatique et physique occupent une place relativement analogue (voire, symétrique) par rapport aux mathématiques. Les deux sont à la fois une inspiration pour les mathématiques et un domaine d'application de celles-ci, et, dans leur partie la plus théorique, elles intersectent largement les maths. (Elles ont aussi, dans leur incarnation moderne, émergé des mathématiques : Turing était mathématicien au moins autant qu'informaticien, comme Newton était mathématicien au moins autant que physicien.) Les maths qui intéressent l'informatique (par exemple la logique et l'algèbre discrète) et les maths qui intéressent la physique (par exemple la géométrie différentielle et la théorie des groupes continus) sont généralement distinctes, mais il y a de grands domaines qui intéressent les deux (comme l'analyse de Fourier ou les probabilités).

☞ Une digression sur mon papa physicien

Je devrais peut-être faire une digression à ce sujet pour parler de mon papa, qui était physicien théoricien, et faisait de la physique qui pourrait franchement être considérée comme des maths (genre, ça), mais qui avait une relation difficile avec les maths et les mathématiciens (il aimait bien citer Feynman qui comparait la rigueur mathématique à la rigor mortis ; il faudrait que je vérifie si elle n'est pas apocryphe aussi celle-là, mais en tout cas ça montre que si son sujet d'étude était très mathématique, son approche n'était pas vraiment celle d'un mathématicien).

Mon papa était en outre persuadé que la physique était la source d'inspiration des maths, et que toutes les idées mathématiques naissaient soient de la recherche d'applications à la physique soit de généralisations assez évidentes de ça. J'aurais dû lui rétorquer plein de choses quand il me disait ça (par exemple, parmi les choses qu'il aurait dû bien savoir en tant que relativiste, que la géométrie riemannienne était là bien avant qu'Einstein n'en ait besoin pour décrire un espace-temps courbe), mais je pense qu'il reflétait là surtout son propre biais d'intérêt dans les domaines qu'il connaissait des mathématiques (à chaque fois que je lui ai parlé de corps de caractéristique p>0, par exemple, il haussait les yeux au ciel comme si c'était vraiment une lubie saugrenue d'étudier des choses aussi déconnectées du monde réel dans lesquelles en ajoutant p fois le nombre 1 on retombe sur 0). C'est intéressant, donc, parce que mon père ne semblait pas du tout avoir considéré cette possibilité que l'informatique soit, de façon analogue à la physique, elle aussi une source féconde d'inspiration en même temps que de débouchés pour les maths. Mais c'est aussi intéressant parce que sa relation compliquée avec les maths, qui dans son cas était plutôt idiosyncratique, est quelque chose que je crois retrouver de façon collective dans des tentatives de trouver un démarquage entre les maths et l'info pour des disciplines qui sont à cheval entre les deux.

☞ L'enseignement de l'informatique comme science

Il me faut sans doute d'abord dire un mot de l'enseignement. Ne sachant pas comment ça se passe ailleurs, je vais évoquer le cas de la France.

Malgré N timides tentatives par le passé, n'ayant jamais vraiment abouti, ce n'est que tout récemment (~2018, peut-être ?) que l'enseignement secondaire français s'est doté, sous le nom de numérique et sciences informatiques (NSI), d'un véritable enseignement (optionnel…) de l'informatique. (Cela me semble impossiblement tardif, mais je crois qu'il vaut mieux que je ne regarde pas à quel moment historique on a commencé à enseigner la physique dans les lycées français, parce que j'ai peur de faire une attaque.) N'ayant pas de contact direct avec le monde de l'enseignement secondaire, je ne peux juger que par les programmes, qui sont un peu bizarres (p.ex., l'enseignement du SQL me semble vraiment bizarrement précis à côté de généralités très vagues sur d'autres plans) mais néanmoins intéressants par certains côtés. Donc je ne vais pas en dire plus.

☞ La génération Z et l'informatique

Même si ce n'est que tangentiel à mon propos, comme c'est quelque chose qui revient régulièrement si on évoque la nécessité de l'enseignement de l'informatique au lycée, il faut que je dénonce un lieu commun, qui dit quelque chose comme ceci :

❝Les jeunes, de nos jours, ils n'ont pas besoin qu'on leur enseigne l'informatique, parce qu'ils ont grandi avec les ordinateurs. D'ailleurs, ils en savent certainement plus que leurs profs de lycée.❞

Il y a tellement de choses fausses là-dedans que je ne sais pas bien par où commencer. Par le fait que l'informatique n'est pas la science des ordinateurs ? Je l'ai déjà signalé. Mais je pourrais aussi remarquer le ridicule de l'idée analogue que parce qu'on a tous grandi avec les voitures thermiques on saurait expliquer comment fonctionne un moteur à explosion[#].

[#] Je serais d'ailleurs sincèrement curieux de savoir quelle proportion de la population prise au hasard dans la rue serait capable d'expliquer approximativement le principe d'un moteur à explosion (disons par exemple, de nommer les quatre phases du cycle d'un moteur à quatre temps). Mais j'ai déjà souligné l'incongruité du fait que ce genre de connaissances ne soient pas considérées comme faisant partie de la culture générale.

Un autre problème avec ce cliché est que, en fait, la génération qui a grandi avec les ordinateurs, c'est plutôt la mienne et la suivante ; la génération de ceux nés au XXIe siècle, ils ont grandi avec des smartphones (et autres interfaces graphiques complètes), et c'est bien différent. Or les interfaces graphiques comme celles des smartphones, comme leur but était de mettre l'outil entre les mains de tout le monde en évitant que Monsieur Toutlemonde ait à connaître quoi que ce soit du fonctionnement interne de la machine, elles ont tout fait pour cacher (dans des skeuomorphes plus ou moins heureux) la moindre chose qui ressemble à de la programmation. En même temps que le monde informatique derrière est devenu de plus en plus compliqué par l'empilement de couches séparant l'utilisateur du matériel (et ceci vaut aussi pour les vrais PC, pas seulement pour les smartphones), l'accès de l'utilisateur à ces couches et devenu de plus en plus compliqué.

Donc je ne pense pas du tout qu'un jeune né en 2000–2010 soit automatiquement doué pour la programmation, encore moins pour comprendre la notion abstraite de machine de Turing, pas plus que quelqu'un qui a grandi avec les voitures modernes — par opposition à la Ford modèle T — est automatiquement doué pour la mécanique auto, encore moins pour expliquer la thermodynamique du cycle d'Otto.

(Loin de moi l'idée de faire mon vieux con en mode c'était mieux âââvant, hein ! Je n'ai rien contre les interfaces graphiques pas plus que je n'en ai contre les voitures modernes. Si on n'est pas obligé de taper mkdir pour créer un répertoire, c'est très bien. Le problème c'est plutôt quand on ne peut même pas taper mkdir pour créer un répertoire. Je ne suis pas non plus en train de reprocher à la génération Z de ne rien savoir faire en-dehors de se servir de leur smartphone — autre cliché à la con que je déteste : je dis juste qu'il ne faut pas automatiquement supposer que grandir avec un smartphone rend ipso facto compétent pour se servir d'un ordinateur, encore moins pour comprendre le fonctionnement d'un ordinateur ou la théorie derrière.)

☞ L'informatique en prépa et à l'agreg

S'agissant de la formation des futurs ingénieurs (i.e., post-baccalauréat), les classes préparatoires scientifiques françaises ont tout récemment (à la rentrée 2022) vu la création d'une filière MPI (pour maths, physique, informatique), qui ouvre un véritablement enseignement de l'informatique en tant que science en classes prépa, à côté des filières MP (maths-physique) et PC (physique-chimie). Un de mes collègues a d'ailleurs participé à l'écriture des programmes de cette filière (du coup, la partie sur les automates finis est fortement inspirée d'un cours que je donnais sur ce sujet à Télécom[#2] et dans lequel ce collègue intervenait). Je suis certainement favorable à cette évolution, et au fait que l'informatique soit traitée comme une vraie manière autonome et pas une sorte d'excroissance des maths ni une distraction proposée en marge des cours et visant uniquement les applications dans d'autres domaines. Pour autant, je pense qu'il faut aussi se méfier de la fausse impression que cela pourrait causer dans l'esprit des préparationnaires qui risquent de croire faussement que parce que c'est de l'informatique ce n'est pas des maths (cf. ce que je dis plus bas sur la grande intersection entre ces domaines) : ils risquent du coup de se construire une image mentale trop exiguë des mathématiques (limitée en gros à l'algèbre linéaire et à l'analyse classique, ce qu'on leur enseigner en cours de maths), alors qu'en fait de grands pans de ce programme informatique auraient très bien pu être enseignés dans un cours de maths.

[#2] Cours dont voici les notes et ici une vidéo des séances de 2020–2021. À ce sujet, en avril 2021 on m'a demandé d'assurer un cours sur le sujet destiné aux profs de prépa (et qui va donc un peu au-delà du programme). Mes slides sont ici, et les vidéos de l'exposé lui-même sont ici pour les 2h du matin et ici pour les 2h de l'après-midi.

Cette création d'une filière MPI en prépa scientifique fait suite de peu à la création d'une agrégation d'informatique (premier concours à l'été 2022). Auparavant, il y avait eu une option informatique à l'agreg de maths (option proposée à l'écrit entre ~1990 et ~1997 je crois, puis à l'oral entre ~2006 et 2022 ; entre les deux il n'y avait rien). Il y a certainement lieu de s'interroger sur la question de savoir s'il était idéal d'avoir une agreg complètement différente plutôt qu'une option, ou une solution intermédiaire (une question analogue se pose certainement aussi sur le rapport entre physique et chimie, ou entre biologie et géologie), ou d'ailleurs s'il était évident que la création d'une agreg d'informatique dût entraîner la suppression de l'option informatique de l'agreg de maths. (Bizarrement, en prépa, il continue à exister une option info en filière MP, qui est distincte de la filière MPI : c'est confusant, pas forcément super cohérent, et un peu compliqué à gérer en aval dans l'enseignement, mais je suis tenté de croire que cette multiplicité des choix a des vertus.)

Sans vouloir suggérer que c'est un mauvais choix scientifique ou pédagogique (au contraire), je pense que ces décisions relèvent largement d'une décision d'affirmer l'indépendance de l'informatique comme discipline scientifique à part entière, et de ne pas laisser l'idée que c'est une sorte d'appendice des mathématiques.

☞ Le problème des limites entre sciences

Au-delà de l'enseignement, parlons un peu de la science pour la science.

Les frontières entre disciplines sont, évidemment, un peu arbitraires. D'abord, je crois fermement à l'unité fondamentale de tous les domaines du savoir humain, c'est-à-dire au moins que je suis sûr qu'on peut passer de proche en proche de la théorie des cordes à la philologie grecque, ou de la biochimie à la musicologie, sans jamais rencontrer de barrière nette. Si cela peut paraître farfelue, je rappelle au passage qu'un concept très important de l'informatique théorique (à l'intersection avec les maths), la notion de grammaire hors contexte a été inventé par un linguiste[#3] (d'ailleurs peut-être plus connu pour son activisme politique), Noam Chomsky.

[#3] Je sais que l'importance de cette notion en linguistique (ou de façon générale toute la linguistique chomskienne, et la notion de grammaire universelle) est assez controversée. Je m'abstiens explicitement de me prononcer sur ces questions sur lesquelles je suis incompétent. Mais quoi qu'on en pense dans le cadre de la linguistique, en informatique théorique c'est une notion fondamentale.

Mais je ne veux pas tomber dans le sophisme des sorites que je ne cesse de dénoncer : ce n'est pas parce que la frontière est floue et/ou largement arbitraire qu'elle n'existe pas, ou qu'on n'a pas le droit de discuter le meilleur endroit où la faire passer.

Les limites administratives entre sciences causent toutes sortes de maux de tête, par exemple pour les candidats à un poste académique dont la spécialité est proche d'une de ces frontières arbitraires : a priori on pourrait imaginer que cela tourne à leur avantage (par exemple, quelqu'un qui fait quelque chose à cheval entre les maths et l'info pourrait candidater aussi bien en maths qu'en info), mais dans la réalité c'est presque toujours un handicap (il y aura toujours quelqu'un pour vous reprocher de faire des choses trop informatiques quand vous candidatez en maths et de faire des choses trop mathématiques quand vous candidatez en info, avec le prétexte que vous auriez dû candidater dans l'autre domaine ; je pense que ceci vaut à chaque fois qu'il y a une interface de ce genre : sur le papier tout le monde dit du bien de la transdisciplinarité, mais dans la réalité ça a tendance à nuire aux candidats de ne pas rentrer dans les bonnes petites cases). Mais ce n'est pas tellement de ça que je veux parler.

Donc, l'informatique fait-elle partie des mathématiques ? Une partie de l'informatique fait-elle partie des mathématiques ? Où est le meilleur endroit pour tracer la limite ?

↑Entry #2778 [older| permalink|newer] / ↑Entrée #2778 [précédente| permalien|suivante] ↑

↓Entry #2774 [older| permalink|newer] / ↓Entrée #2774 [précédente| permalien|suivante] ↓

(dimanche)

Une énigme avec un dragon et de la calculabilité

Allez, en cadeau de Noël, un deuxième billet à deux jours d'intervalle, ce qui est devenu très rare sur ce blog : je vous propose une devinette dont je posterai la solution ultérieurement. Je la trouve très jolie et surprenante et je pense qu'elle aurait beaucoup plu à Raymond Smullyan.

Méta : Elle m'est venue en réfléchissant à des questions de maths (autour de la réalisabilité propositionnelle). La formulation est de moi, mais c'est en fait une réécriture d'un théorème (de Plisko, je donnerai la référence précise en même temps que la solution) dont j'ai lu l'énoncé et que j'ai reformulé comme une énigme pour y réfléchir parce que je ne voulais pas lire la preuve mais la retrouver moi-même. J'ai eu énormément de mal à la résoudre, donc je pense qu'elle est vraiment dure (d'un autre côté, je n'étais pas sûr d'avoir trouver la bonne formulation, donc je réfléchissais à la fois à la question et à la réponse), mais quand je l'ai présentée sur Twitter, au moins une personne a trouvé la solution, donc elle n'est certainement pas insoluble. Même si elle a un rapport distant avec mon très long billet tout récent sur Curry-Howard (et je compte écrire une autre entrée qui fait référence aux deux, et qui explique l'intérêt mathématique de cette énigme), il n'est pas nécessaire, ni même spécialement utile, d'avoir lu ce billet (ni aucun autre) pour réfléchir à cette énigme. En revanche, il est certainement pertinent d'avoir des notions de calculabilité pour espérer y arriver (même si je vais présenter l'énoncé pour qu'il soit compréhensible sans ça). J'éditerai ce billet d'ici quelques jours pour présenter la réponse ainsi que quelques commentaires : pour l'instant je me contente de l'énoncé de l'énigme, suivi de quelques commentaires.

L'énigme

Vous êtes un aventurier dans un donjon. Devant vous se trouvent trois portes, identiques à part leur étiquette : A, B et C. Derrière une de ces portes se trouve un dragon, qui vous dévorera si vous ouvrez la porte, mais vous ne savez pas laquelle. Votre but est d'ouvrir une des portes « sûres », c'est-à-dire sans dragon (et qui conduisent à la sortie et, soyons généreux, à un trésor pour vous récompenser d'avoir résolu l'énigme). Peu importe quelle porte sûre vous ouvrez, la seule chose qui importe est de ne pas ouvrir la porte au dragon.

Pour vous aider à trouver une porte sûre, il y a un indice apposé sur chaque porte. Mais comme ceci est un donjon très moderne, pas ces trucs poussiéreux des magiciens d'il y a quelques siècles, chaque indice prend la forme d'un programme informatique. Ça tombe bien, vous avez un ordinateur capable de faire tourner ces programmes (ou pour en examiner le contenu si vous le voulez).

L'idée générale est que le programme apposé sur chaque porte devrait, quand vous l'exécutez, vous indiquer une des deux autres portes qui soit sûre. Mais ce n'est pas si simple ! Car le programme demande quelque chose en entrée, et ne fonctionnera correctement que si on lui a fourni le bon quelque chose. Et ce quelque chose est aussi un programme (qui, lui, ne prend rien en entrée).

Les règles précises sont les suivantes :

  • Le programme apposé sur la porte au dragon, quoi qu'on lui passe en entrée, va terminer quoi qu'il arrive et produire comme résultat l'étiquette d'une des deux autres portes. (Comme il n'y a qu'un dragon, les deux autres portes sont sûres, donc ce sera de toute façon une porte sûre. Son choix peut dépendre de ce que vous avez donné en entrée, mais il doit produire un résultat dans tous les cas, même si le programme qu'on lui a fourni en entrée n'a pas de sens ou ne termine pas ou quoi que ce soit du genre.)

  • Le programme apposé sur une porte « sûre » va terminer et produire comme résultat l'étiquette de l'autre porte sûre (il n'y en a qu'une autre), mais à condition qu'on lui ait fourni comme entrée un autre programme qui lui-même (exécuté sans entrée) produit comme résultat l'étiquette de l'autre porte sûre. Si cette condition n'est pas remplie, le comportement du programme n'est pas précisé (il pourrait ne pas terminer, produire une mauvaise porte, ou afficher 42 ou n'importe quoi d'autre ; mais il ne va pas vous tuer, quand même : c'est un programme, pas un dragon, et votre ordinateur peut le faire tourner sans risque).

Je redis ça pour être bien sûr d'avoir été clair. Appelons X la porte au dragon, et Y,Z les deux autres portes. Appelons pX,pY,pZ les programmes apposés aux portes X,Y,Z respectivement, et q un programme qu'on décide de passer en entrée à un de pX,pY,pZ. Les garanties sont : d'abord, concernant la porte au dragon, pX(q) termine quoi que soit q et produit comme résultat soit Y soit Z ; ensuite, concernant les deux autres portes : si q termine et produit Z comme résultat alors pY(q) termine et produit lui aussi Z comme résultat, et de même, si q termine et produit Y comme résultat alors pZ(q) termine et produit Y comme résultat.

Vous avez bien sûr le droit de lancer les programmes plusieurs fois (séquentiellement ou en parallèle) avec des entrées différentes. Vous avez le droit de créer vos propres programmes (par exemple écrire un programme qui produit toujours la sortie B, et fournir ça au programme de la porte C est légitime ; ou même faire un programme qui exécute le programme de la porte C sur le programme qui produit toujours B en sortie, et fournir ça au programme de la porte A : tout ça est légitime). Vous avez aussi tout le temps nécessaire, mais il faut quand même arriver à un résultat de façon certaine au bout d'un temps fini (donc on a le droit d'attendre longtemps la sortie d'un programme, mais s'il ne termine jamais c'est un échec).

En fait, votre réponse sera elle-même algorithmique. C'est-à-dire que techniquement, ce que je demande c'est d'écrire un programme qui prend en entrée les programmes pX,pY,pZ apposés aux trois portes et qui, quelle que soit la porte au dragon et quels que soient pX,pY,pZ vérifiant les contraintes, termine et produit en sortie l'étiquette d'une porte qui n'a pas de dragon.

Voilà, c'est un peu long, mais j'espère que c'est parfaitement clair. S'il y a quelque chose qui ne l'est pas, dites-le moi en commentaire et j'essaierai de préciser les règles.

Résumé : Il y a une seule porte avec un dragon et on ne sait pas laquelle, les deux autres sont sûres et le but est de trouver une porte sûre. Chaque porte a un programme apposé comme indice. Ce programme termine et produit comme résultat l'étiquette d'une des deux autres portes qui soit sûre ; mais, s'agissant du programme apposé sur une porte sûre, ceci n'est garanti que sous condition qu'on lui passe comme entrée un programme (sans entrée) qui lui-même termine et produise comme résultat l'étiquette de l'autre autre porte qui soit sûre.

Comment vous tirez-vous (de façon certaine) de cette fâcheuse situation ?

Pourquoi elle semble insoluble

J'ai fini l'énoncé de l'énigme et on peut s'arrêter de lire là si on veut y réfléchir ; mais je vais quand même faire un commentaire qui, sans vraiment constituer un indice, attire l'attention sur ce qui est difficile dans cette énigme.

↑Entry #2774 [older| permalink|newer] / ↑Entrée #2774 [précédente| permalien|suivante] ↑

↓Entry #2773 [older| permalink|newer] / ↓Entrée #2773 [précédente| permalien|suivante] ↓

(vendredi)

Une introduction à la correspondance de Curry-Howard

Méta : Le présent billet, quoique indépendant, est une sorte de suite de celui-ci où j'exposais quelques points d'informatique théorique que j'ai appris, ou mieux/enfin compris, en enseignant un cours que je crée cette année à Télécom. En fait, j'étais parti pour écrire quelque chose sur un sujet plus spéculatif, mais je me suis dit que pour commencer il fallait que j'explique proprement la correspondance de Curry-Howard, et comme c'est justement une des choses que j'enseigne et que je trouve généralement très mal expliqué, autant en faire aussi une entrée de blog ; puis comme j'étais trop débordé par l'écriture des transparents du cours lui-même, j'ai laissé ça de côté. J'ai de nouveau un petit peu de temps avec les vacances, donc je publie et complète séparément ce bout sur Curry-Howard comme un texte autonome, dans l'espoir de faire ensuite un autre billet sur les questions qui, au-delà de mon enseignement du moment, m'avaient initialement motivé à en parler. Mais comme je tombe dans un trou de lapin dès que je me mets à écrire sur un sujet, j'ai quand même élargi le sujet à des questions connexes.

Table des matières

Introduction

[Sean Connery dans le rôle de Guillaume de Baskerville dans le film “Le Nom de la Rose”] Preuves mathématiques
(contemplatives ?)

[Sean Connery dans le rôle de Zed dans le film “Zardoz”] Programmes informatiques
(dynamiques ?)

Bref, mon but est d'exposer (avec des prérequis aussi limités que possible) la correspondance de Curry-Howard entre preuves et programmes.

De quoi s'agit-il ? On résume parfois la correspondance de Curry-Howard en disant que, comme un bon acteur capable de prendre des rôles très différents, les preuves mathématiques et les programmes informatiques sont, en fait, fondamentalement la même chose (et d'ailleurs je suis très content de l'illustration ci-contre).

À vrai dire, ce raccourci, qui a le mérite d'être mémorable, est un peu… raccourci. Ce ne sont pas n'importe quelles preuves et surtout, ce ne sont pas n'importe quels programmes. Côté preuves, il s'agit a priori de preuves en logique intuitionniste (c'est-à-dire sans le tiers exclu ; je vais définir les choses précisément ci-dessous), et même si on peut étendre Curry-Howard à la logique classique grâce à la fonction call/cc, la correspondance obtenue n'est peut-être pas aussi satisfaisante. Côté programmes, il s'agit de programmes écrits dans des langages fortement typés dans lesquels la terminaison de tout programme est garanti : donc ce ne sont pas du tout les langages de programmation habituels, lesquels permettent des boucles infinies et/ou des appels récursifs illimités[#] ; il n'y a rien non plus qui corresponde à des effets de bord (modification de valeurs, entrées-sorties, rien de tel). Parmi les limites de Curry-Howard, il y a aussi des différences subtiles dans la signification de la quantification existentielle (‘∃’) en logique par rapport aux types sommes (‘Σ’) qui vont faire l'objet de mon « addendum 1 » plus bas.

Toujours est-il que, malgré ces limitations, Curry-Howard établit une correspondance entre, côté logique propositions et preuves de ces propositions, et, côté informatique, types dans un langage informatique fortement typé et termes (i.e., programmes) de ces types. À un certain niveau c'est même une trivialité (observer qu'on exactement les mêmes règles de formation des deux côtés : c'est juste deux façons de voir le même acteur, cet acteur étant une sorte de λ-calcul qui peut servir soit à désigner des preuves soit à coder des programmes) ; mais quand même, cette correspondance permet d'interpréter une preuve comme quelque chose qui va s'exécuter, prendre des données en entrée et renvoyer des résultats à la sortie, et c'est assez frappant, et c'est l'essence de ce qui permet d'extraire d'une preuve constructive un programme réalisant le calcul qu'elle prétend construire (j'agite un peu les mains ici). À titre d'exemple, le programme qui correspond à la preuve « évidente » de AB ⇒ BA (si A et B sont vrais, alors B et A sont vrais) est le programme qui prend en entrée un couple et échange les deux coordonnées de ce couple (lesquelles peuvent être de types arbitraires).

[#] Comme je l'ai déjà signalé ici, autoriser ces appels récursifs revient très précisément, au niveau preuves, à autoriser les raisonnements du style suivant : Je veux démontrer que les poules ont des dents. Je tiens l'affirmation suivante : Si j'ai raison, alors les poules ont des dents. Clairement, si j'ai raison (c'est-à-dire, si cette affirmation est vraie), alors les poules ont des dents. Mais c'était justement mon affirmation : donc j'ai raison. Donc, par ce qui vient d'être démontré, les poules ont des dents. Il est peut-être intéressant de s'intéresser à des logiques paraconsistantes dans lesquelles une telle démonstration serait permise (et du coup, tout est démontrable, de même que dans un langage de programmation usuel on peut fabriquer un programme de n'importe quel type — même le type vide, c'est juste que le programme ne terminera pas), mais ce n'est pas ce qu'on appelle usuellement une « démonstration » mathématique.

De façon un petit peu plus détaillée, la correspondance de Curry-Howard met en regard (je vais essayer d'expliquer ces différents points dans la suite, donc ceci est un divulgâchis qui a pour but d'aider à se retrouver dans la masse de mes explications si on décide de la lire en diagonale) :

  • propositions avec types ;
  • preuves avec termes (= programmes) ;
  • implication logique (PQ) avec types fonctions (στ, qui correspond aux fonctions prenant une valeur de type σ et renvoyant une valeur de type τ) ;
  • modus ponens (application d'une implication : si PQ et P alors Q) avec application d'une fonction (une fonction στ s'applique à un type σ pour donner un type τ) ;
  • ouverture d'une hypothèse (pour démontrer une implication) avec λ-abstraction (= définition d'une fonction à partir d'un argument) ;
  • hypothèses actuellement ouvertes avec variables libres (en contexte) dans le programme ;
  • hypothèses déchargées avec variables liées dans le programme ;
  • conjonction (et logique : PQ) avec types produits (σ×τ, qui correspond aux données d'un couple d'une valeur de type σ et d'une valeur de type τ) ;
  • disjonction (ou logique : PQ) avec types produits (σ+τ, qui correspond aux données soit d'une valeur de type σ soit d'une valeur de type τ, avec un sélecteur qui indique dans quel cas on se trouve) ;
  • le vrai (noté ‘⊤’, affirmation tautologiquement vraie) avec le type unité (ayant une seule valeur, triviale) ;
  • le faux (noté ‘⊥’, affirmation tautologiquement fausse) avec le type vide (n'ayant aucune valeur) ;
  • quantification universelle ∀(v:U).P(v) (qui est une sorte de « conjonction en famille » ⋀v:U P(v) sur tous les v de type U) avec types produits en famille ∏v:U σ(v) (type des fonctions prenant un v de type U et renvoyant une valeur de type σ(v)) ;
  • quantification existentielle ∃(v:U).P(v) (qui est une sorte de « disjonction en famille » ⋁v:U P(v) sur les v de type U) avec types sommes en famille ∑v:U σ(v) (type des données d'un v₀ de type U et d'une valeur de type σ(v₀)).

La correspondance est surtout satisfaisante dans le sens des preuves vers les programmes, i.e., donnée une démonstration, arriver à construire un programme. C'est cette direction que je vais essayer d'exposer ci-après, en laissant globalement de côté la question de si on obtient tous les programmes de cette façon (ce qui demanderait d'expliquer précisément ce que sont « tous les programmes », et j'ai peur qu'on ne puisse avoir qu'une réponse un peu triviale en prenant la définition de programme qui fait rend Curry-Howard bijectif, c'est-à-dire de prendre pile-poil ceux qu'on peut fabriquer de la sorte : c'est en quelque sorte tout l'objet du typage que de limiter les programmes écrivibles à ceux que la correspondance de Curry-Howard atteint).

Bref, mon but dans la suite est d'exposer ça plus précisément, d'abord dans le cas purement propositionnel, c'est-à-dire sans quantificateurs (c'est nettement plus simple et si ça peut sembler ennuyeux je pense qu'il a déjà énormément à nous apprendre), et ensuite dire des choses plus vagues sur les quantificateurs (les quantificateurs posent toutes sortes de difficultés pénibles sur ce qu'on a le droit de quantifier exactement), en regardant d'un peu plus près la logique du premier ordre (qui est la forme de quantification la plus simple) ; je finis par parler de deux points indépendants (et que je ne comprends que de façon très imparfaite, donc je serai encore plus vague et à la limite de l'agitage de mains) : la question du sens du ‘∃’ d'une part, et l'imprédicativité de l'autre.

L'exposition que je vais faire ici suit pour le début la même idée que mon cours, pour laquelle on peut se référer à ce jeu de transparents pour la partie propositionnelle, mais je vais plutôt partir du côté preuves et ne pas entrer dans une description précise de ce qu'est le λ-calcul simplement typé. En revanche, la fin de ce billet va nettement au-delà de ce que je compte exposer dans mon cours (la partie de mon cours sur les quantificateurs est encore à l'état d'ébauche au moment où j'écris ce paragraphe, mais de toute façon je ne vais pas dire grand-chose).

Puisque ce sera le côté « preuves », je commence par des explications sur la logique intuitionniste (propositionnelle pour commencer) et sur ses règles de démonstration : on peut aussi se référer à ce billet passé pour le contexte général (y compris historique) sur les maths constructives, et cet autre billet (assez mal écrit) pour une description un peu différente des règles de la logique (en style « calcul des séquents »).

↑Entry #2773 [older| permalink|newer] / ↑Entrée #2773 [précédente| permalien|suivante] ↑

↓Entry #2771 [older| permalink|newer] / ↓Entrée #2771 [précédente| permalien|suivante] ↓

(vendredi)

Où j'apprends aussi l'informatique en l'enseignant

Ce que j'aime surtout dans le fait d'enseigner, c'est qu'on apprend souvent soi-même plein de choses sur le sujet qu'on enseigne, surtout la première fois, et surtout si on crée soi-même le programme du cours : on croyait bien savoir les choses de loin, mais être obligé de les regarder de près pour les enseigner oblige souvent à se rendre compte qu'il y avait une subtilité là où on ne le savait pas (ou qu'on avait oubliée) ; ça peut éventuellement conduire à une panique zut, l'approche que je croyais avoir tracée pour ce cours ne marche pas ! comment est-ce que je vais m'en sortir ?, mais souvent on en ressort bien plus compétent qu'avant : même si la subtilité qu'on a découverte, finalement, n'est pas enseignée, l'enseignant sera quand même meilleur (ceci étant, les personnes à qui on enseigne la première fois risquent de moins goûter l'expérience, et il faut parfois quelques années pour que la découverte de surprises se tarisse et que l'enseignant soit rôdé).

Pour prendre un exemple passé précis, en enseignant mon cours de théories des jeux (notez le pluriel à théories !) à Télécom — dont les notes sont ici si ça intéresse quelqu'un — je me suis rendu compte d'une subtilité importante dont je n'avais pas du tout pris conscience avant : quand on parle de stratégie dans un jeu (à information parfaite), on peut soit s'intéresser aux stratégies qui, pour prescrire un coup à jouer, dépendent seulement de la configuration actuelle du jeu (appelons-les stratégies positionnelles), soit de celles, plus générales, qui dépendent de tout l'historique de la confrontation jusqu'à ce point (appelons-les stratégies historiques) ; or, même si la règle du jeu ne dépend que de la configuration actuelle et pas de l'historique qui a mené à cette configuration, ce n'est pas du tout évident a priori qu'une stratégie gagnante dans le sens plus général (historique) soit forcément traduisible en une stratégie gagnante dans le sens plus restreint (positionnel) ; et j'avais un peu paniqué, parce que j'avais construit mon cours autour de la démonstration de l'existence d'une stratégie gagnante dans un sens via la théorie des jeux de Gale-Stewart (qui sont intrinsèquement « historiques »), alors que j'en avais besoin ensuite au sens plus fort (« positionnel ») pour la théorie de Sprague-Grundy. J'ai réussi à m'en sortir (j'ai écrit des notes expliquant correctement le lien, voir la section 3.5 du PDF lié ci-dessus), en cours je demande aux élèves d'admettre ce point en les renvoyant au poly s'ils ne veulent pas l'admettre, donc finalement je n'enseigne pas vraiment cette subtilité, mais j'ai été content d'en prendre conscience, et je suis étonné qu'il soit si peu évoqué, ou si mal expliqué, dans la littérature scientifique sur le sujet.

Même en donnant un cours d'analyse (dont je n'étais, cette fois, pas le responsable ni le créateur, mais simple intervenant) j'ai appris un certain nombre de choses sur le sujet, voyez par exemple ce billet passé pour quelque chose que j'ai appris au détour d'un exercice. Et en donnant un cours d'initiation à la géométrie algébrique, je me rends surtout compte… que c'est très difficile d'enseigner la géométrie algébrique et que je ne sais même pas produire une définition d'un morphisme entre variétés quasiprojectives (l'objet fondamental du domaine, quoi) qui ne soit pas abominable dans sa complication.

Bref. Cette année, comme je l'ai raconté ici et , j'inaugure un cours intitulé Logique et Fondements de l'Informatique où je dois parler de calculabilité, λ-calcul, logique, typage, isomorphisme de Curry-Howard, ce genre de choses (un programme à vrai dire assez ambitieux, mais on m'a donné comme consigne de profiter de la création de la filière MPI en prépa pour viser quelque chose d'assez sérieux). Des choses, à cheval entre mathématiques et informatique théorique, qui me plaisent beaucoup (sur la calculabilité voyez par exemple ce long billet) et sur lesquelles je pensais ne pas avoir grand-chose à apprendre… Famous last words!

(La suite de ce billet est essentiellement un brain dump de quelques unes des choses que j'ai apprises, réapprises, ou mieux comprises en préparant ce cours jusqu'à présent. Noter que ça ne veut pas dire que je vais les enseigner ! Ou du moins pas forcément sous cette forme. Comme les petits bouts de ce billet, de longueur très inégales, sont assez indépendants, je les ai séparés par des fleurons : si on n'aime pas ce que je raconte à un endroit donné, on peut sauter jusqu'au fleuron suivant.)

Il y a des choses que j'ai apprises en marge de la préparation de ce cours, sans que ça ait vraiment d'impact dessus. Par exemple, comment on fabrique des modèles du lambda-calcul non typé (pour ceux qui veulent en savoir plus là-dessus, j'ai bien aimé l'article From computation to foundations via functions and application: The λ-calculus and its webbed models de Chantal Berline, et notamment la partie sur les K-modèles, qui m'ont semblé les plus parlants de tout cette histoire : de façon très sommaire, on représente un terme par l'ensemble de tous les types qu'on peut lui attribuer dans un certain système de typage dont les types ne sont pas disjoints ; en plus ça semble avoir un rapport avec la réalisabilité, ce qui n'est pas déplaisant) : ce n'est pas spécialement une difficulté que j'ai rencontrée, juste quelque chose que j'ai appris au passage.

Il y a aussi des choses que je pensais savoir sans vraiment y avoir suffisamment réfléchi. Notamment, comment fonctionne au juste le combinateur de point fixe Y de Curry. J'avais déjà appris il y a longtemps que dans un langage fonctionnel non typé on peut faire des appels récursifs sans faire d'appels récursifs, par exemple (en Scheme) :

(define proto-fibonacci
  (lambda (self)
    (lambda (n) 
      (if (<= n 1) n
	  (+ ((self self) (- n 1)) ((self self) (- n 2)))))))
(define fibonacci (proto-fibonacci proto-fibonacci))

— code la fonction définie récursivement[#] par F(n)=n si n≤1 et F(n) = F(n−1) + F(n−2) sinon, sans jamais que la fonction fasse appel à elle-même dans sa définition (c'est, en fait, l'astuce de Quine — qui n'est pas due à Quine, c'est Hofstadter qui lui a donné ce nom-là, mais à Cantor, Gödel, Turing et Kleene — et sur laquelle j'avais écrit une page alors que mes élèves actuels n'étaient même pas nés). L'astuce (de Quine qui n'est pas de Quine), donc, c'est qu'on passe la fonction proto-fibonacci en argument à la fonction proto-fibonacci, et quand elle a besoin de faire appel à elle-même, elle applique son argument (self) en prenant bien soin de lui passer une copie de lui-même, d'où le self self dans ce code.

[#] Oui, je sais que la suite de Fibonacci est un très mauvais exemple de récursion parce qu'en vrai il ne faut pas la coder de façon récursive, c'est épouvantable pour la complexité ; mais c'est un exemple facile à lire, donc je le reprends avec cet avertissement qu'il ne faut pas faire comme ça pour autre chose que pour illustrer les appels récursifs.

Vous noterez bien, donc, qu'il n'y a pas d'appels récursifs dans ce code. La même astuce de Quine permet de faire un programme qui s'écrit lui-même même si le langage ne permet pas de faire référence à lui-même (voyez ma vieille page liée ci-dessus pour tous les détails), à Gödel de fabriquer un énoncé qui dit je suis indémontrable, etc. Ici ça sert à ce qu'une fonction s'appelle elle-même même si le langage ne permettait pas les appels récursifs comme construction spéciale (par exemple en λ-calcul, il n'y a pas de construction récursive).

Ici on est dans un langage fonctionnel donc on peut juste appeler une fonction passé en argument, mais dans un langage non fonctionnel capable d'écrire un interpréteur de lui-même, on pourrait quand même simuler les appels récursifs en lançant l'interpréteur (sur une représentation du code de la fonction !) à chaque fois qu'il est écrit self self dans le code ci-dessus, ce qui est la façon la plus mind-blowing de faire de la récursion, et je ne m'étais pas rendu compte de ça avant de commencer à préparer ce cours.

↑Entry #2771 [older| permalink|newer] / ↑Entrée #2771 [précédente| permalien|suivante] ↑

↓Entry #2769 [older| permalink|newer] / ↓Entrée #2769 [précédente| permalien|suivante] ↓

(dimanche)

Étude critique de vulgarisation mathématique : une petite vidéo d'Arte

La chaîne de télé Arte produit une série de petites vidéos de vulgarisation scientifique (à destination du grand public) sur les mathématiques appelée Voyages au pays des maths (on les trouve ici sur le site web d'Arte ou ici sur YouTube) : je n'en ai regardé qu'une partie (via leur site Web : je ne suis pas tombé dessus à l'antenne, mais c'est juste parce que je n'allume jamais la télé), mais celles que j'ai vues me semblent globalement correctes : il y a parfois des affirmations douteuses ou qui peuvent induire des idées fausses mais je n'ai rien entendu dans celles que j'ai regardées qui me fasse bondir au plafond ; la présentation est plutôt pas mal au sens où j'ai l'impression que tout le monde peut accrocher au moins un peu, et comme chacune dure 10 minutes, même si on n'aime pas, on n'a pas le temps de s'endormir et je pense que ça peut convaincre des gens d'essayer au moins de s'intéresser un minimum au genre de choses sur lesquelles les maths se penchent. (Je peux éventuellement reprocher au choix des sujets, même s'il est agréablement éclectique, de mélanger des choses qui sont des problèmes profonds et difficiles avec des petites curiosités qui ne font pas l'objet de recherches ; ce n'est pas grave en soi, mais il faudrait peut-être mieux expliquer au public ce qui tombe dans chaque catégorie.)

Comme je l'avais raconté dans cette entrée passée de ce blog, je suis moi-même intéressé par la vulgarisation mathématique, pas pour le contenu de ce que ça raconte, mais pour apprendre à améliorer ma propre présentation des choses, qu'il s'agisse de vulgarisation, d'enseignement (ou même d'exposition à des pairs), et à tous les niveaux (du grand public aux chercheurs).

Or il se trouve justement que dans cette série Voyages au pays des maths est paru un épisode intitulé L'Entscheidungsproblem ou la fin des mathématiques ? (visible ici sur le site web d'Arte ou ici sur YouTube) qui porte sur le même sujet — la calculabilité — sur lequel j'ai récemment publié les transparents d'un cours que j'inaugure cette année à Télécom Paris (et aussi un billet qui se veut grand public sur un thème apparenté).

Du coup je suis curieux de savoir comment ce genre de vulgarisation est jugé par le grand public : j'apprécierais si des personnes qui lisent mon blog, surtout celles qui ne sont pas mathématiciennes, idéalement même pas scientifiques, pouvaient regarder cette vidéo de 10 minutes et me dire ce qu'elles en pensent : ce qu'elles en retiennent, si elles ont l'impression de comprendre les enjeux évoqués, quels passages sont clairs, lesquels ne le sont pas, ce genre de choses, et si elles sont d'accord avec mes critiques qui vont suivre.

(Si possible, merci de regarder la vidéo avant de lire la suite pour ne pas se laisser influencer par mes propres remarques qui vont suivre ; et aussi tout bêtement parce qu'elles sont sans doute difficiles à lire si on n'a pas vu la vidéo avant.)

↑Entry #2769 [older| permalink|newer] / ↑Entrée #2769 [précédente| permalien|suivante] ↑

↓Entry #2767 [older| permalink|newer] / ↓Entrée #2767 [précédente| permalien|suivante] ↓

(mercredi)

Transparents de cours de calculabilité

Comme je le disais il y a un mois, je me suis engagé à organiser à Télécom Paris(PlusÀParis) un cours de Logique et Fondements de l'Informatique où je dois parler de calculabilité, logique et typage. Je suis évidemment complètement à la bourre sur la préparation de ce cours, qui commence , mais bon, j'ai au moins provisoirement fini d'écrire des transparents pour la partie « calculabilité » qui devrait occuper, je pense, bien 6h de cours (sur 22h au total pour le cours magistral ; il y a des TD/TP à côté). Autant que je rende ça public dès maintenant, des fois que des gens voudraient m'aider à corriger les fautes. Donc :

Ces transparents sont en ligne ici

(Je compte concaténer ceux de la suite du cours quand il seront écrits. Je ne sais pas encore comment je veux diviser ça donc ce n'est pas évident de choisir des adresses intelligemment.)

J'ai à peine commencé à les relire, donc c'est certainement bourré de typos et de fautes plus ou moins graves. J'espère quand même qu'il n'y a pas d'erreur tellement grave qu'elle m'obligerait à tout restructurer.

Si vous faites des commentaires, pensez à me donner l'identifiant Git (en bas du premier transparent) auxquels ils se rapportent. (Au moment où j'écris ce billet, c'est 31080ea Wed Nov 1 11:06:40 2023 +0100 ; l'arbre Git avec le source est ici.)

Il faut préciser que ça s'adresse à des élèves ayant déjà fait de l'informatique en prépa (filière MPI ou filière MP option info, plus quelques uns venus de licences d'info ; les programmes des classes prépa sont ici), donc d'une part ce n'est pas comme s'ils découvraient tout, d'autre part on peut les espérer motivés par le sujet.

Dans cette partie calculabilité, je présente les fonctions primitives récursives et surtout générales récursives, les machines de Turing et le λ-calcul non typé, l'esquisse de l'équivalence entre les trois présentations de la calculabilité (fonctions générales récursives, machines de Turing et λ-calcul non typé), ainsi que divers résultats classiques fondamentaux : théorème s-m-n, théorème de récursion de Kleene, existence d'une machine universelle, résultats élémentaires sur les ensembles décidables (= calculables) et semi-décidables (= calculablement énumérables), et bien sûr l'indécidabilité du problème de l'arrêt (et aussi l'incalculabilité de la fonction « castor affairé »). Dans la suite du cours, il est prévu de parler de λ-calcul simplement typé en lien avec le calcul propositionnel intuitionniste, puis de diverses extensions (logique classique, logique du premier ordre, et évoquer divers bouts du cube de Barendregt). Le fil conducteur du cours est censé être quelque chose comme ceci : L'indécidabilité du problème de l'arrêt signifie que tout langage informatique qui garantit la terminaison des programmes est nécessairement limité ; des systèmes de typage de plus en plus puissants cherchent à rendre cette limitation aussi faible que possible.

J'ai renoncé à parler, même allusivement, de machines avec oracle ou de degrés de Turing ; mais les gens qui veulent en savoir plus sur ce sujet peuvent se référer à ce billet interminable pour lequel les notes ci-dessus suffisent largement en matière de prérequis.

Ajout () : Suivant ce qu'on m'a fait remarquer en commentaire, j'ai ajouté (Git 1cdc719 Thu Nov 2 17:08:48 2023 +0100) des choses sur le théorème de Rice et les réductions (many-to-one et de Turing). Il est cependant vraisemblable que j'en saute au moins une partie.

Le fait de me replonger dans le λ-calcul non typé, et de vouloir en savoir plus que le minimum que j'enseigne, m'a obligé à réapprendre plein de choses à son sujet[#], que j'avais complètement oublié ou jamais sues, et redécouvrir toutes les petites crottes de ragondin qui polluent un sujet qui a superficiellement l'air simple et élégant (comme : la différence entre β-réduction et βη-réduction, la différence entre termes normalisables et fortement normalisables, la différence entre stratégie de réduction extérieure gauche et intérieure gauche, la différence entre forme normale, forme normale de tête et forme normale de tête faible, etc.) ; le livre de Barendregt (The Lambda Calculus: Its Syntax and Semantics) est assez abominable en matière de dissection de crottes de ragondin, et celui de Krivine (Lambda-calcul : types et modèles — disponible en ligne en traduction anglaise) ne l'est pas moins. Un des problèmes est sans doute qu'on n'a pas vraiment idée de ce que sont les termes du λ-calcul non typé (prima facie, ce sont des fonctions qui prennent en entrée une autre fonction de même sorte et renvoient une autre fonction de même sorte : ce n'est pas du tout clair qu'on puisse fabriquer un objet qui soit aussi l'objet des morphismes de lui-même dans lui-même !) : divers gens (en commençant par Dana Scott à la fin des années 1960) ont réussi à en donner des modèles, ce qui éclaircit un peu la sémantique, mais là aussi on se perd entre les différentes manières de fabriquer des modèles du λ-calcul et les zillions de relations d'équivalence entre types que fournissent ces façons de fabriquer des modèles. (J'ai commencé à lire plein de choses sur le sujet, et surtout à me noyer dans les notations pourries. J'espère que l'article From computation to foundations via functions and application: The λ-calculus and its webbed models de Chantal Berline m'aidera à y voir plus clair.)

Je suis assez étonné, en revanche, de ne pas trouver d'implémentation (libre, flexible et largement disponible) du λ-calcul non typé, qui permettrait de tester un peu les choses (transformer les notations, réécrire les termes à la main ou de façon automatisée, comparer les stratégies de réduction, etc.). Est-ce que j'en ai raté une évidente ?

[#] La première fois que j'ai appris des choses sur le λ-calcul, ça devait être vers 1990 quand on m'a offert le livre de vulgarisation scientifique The Emperor's New Mind de Roger Penrose (j'en ai parlé dans une section d'une entrée récente), qui décrit un peu le λ-calcul et les entiers de Church, et ça m'a complètement fasciné que des règles typographiques aussi simples et élégantes (← mais bon, en fait, une bonne quantité de poussière avait été glissée sous le tapis) puissent donner quelque chose d'aussi puisant.

Ajout () : Par pure coïncidence, la chaîne de télé Arte vient de produire, dans le cadre de sa série Voyages au pays des maths, un mini-documentaire de vulgarisation (10 minutes) intitulé L'Entscheidungsproblem ou la fin des mathématiques ? (ici sur YouTube, ici sur le site web d'Arte) et qui porte justement sur le sujet dont je parle ici. Je ne suis pas d'accord avec tous les choix de présentation, mais ça donne au moins une idée de ce dont il est question (et notamment, tenter de vulgariser l'équivalence entre fonctions générales récursives, machines de Turing et λ-calcul était un défi pas du tout évident, et je trouve qu'il s'en sort pas mal). Surajout : voir ce nouveau billet où je décortique un peu plus cette vidéo.

Ajout () : j'ai fait un bilan de la première année de ce cours dans un billet ultérieur.

↑Entry #2767 [older| permalink|newer] / ↑Entrée #2767 [précédente| permalien|suivante] ↑

↓Entry #2764 [older| permalink|newer] / ↓Entrée #2764 [précédente| permalien|suivante] ↓

(mercredi)

Oracles en calculabilité : degrés de Turing et diverses généralisations

Avant-propos et motivation

Avant-propos : J'ai publié il y a quelque temps un billet de vulgarisation sur la notion d'« oracle » en informatique théorique. Ce billet-là (qui se veut grand public) était initialement destiné à être l'introduction à celui-ci (plus technique — mais, j'espère, pas incompréhensible pour autant), mais j'ai décidé de les publier séparément parce qu'ils sont, en fait, à peu près indépendants : on peut donc commencer par lire celui-là si on veut une sorte d'explication introductive et de motivation du sujet, mais ce n'est pas nécessaire non plus.

Ce billet-ci, plus technique mais j'espère pas incompréhensible pour autant (voir le paragraphe suivant pour les prérequis), vise à présenter la notion classique de degré de Turing, et ensuite diverses généralisations de celles-ci dans la recherche contemporaine en logique / calculabilité. Mais je trouve aussi intéressant de vulgariser la notion (classique) de non-déterminisme et celle (pas du tout classique, mais que je trouve très intéressante) de « co-non-déterminisme » (le terme est de moi).

Pour ce qui est des prérequis, ce billet-ci s'adresse à des lecteurs qui savent déjà les bases de la calculabilité : c'est-à-dire en gros, ce qu'est une machine de Turing ou un algorithme (c'est-à-dire au moins approximativement : je n'ai pas l'intention de rentrer dans quelques détails que ce soit sur les état et les bandes), et une fonction calculable (c'est-à-dire, calculable au sens de Church-Turing), ce genre de choses. Je vais essayer de faire en sorte de ne supposer connu (outre des maths générales, du genre ce que c'est qu'une fonction, un ensemble, une partie, une bijection, un ordre, une relation d'équivalence…) que le contenu du chapitre 5 (Introduction à la calculabilité) des notes de mon cours Théorie des langages à Télécom, auquel je peux donc renvoyer pour ces notions de base en calculabilité (en attendant un nouveau cours sur le sujet). • Ajout () : la première partie des transparents de mon nouveau cours est disponible ici.

En tout cas, je ne suppose pas connu la notion de degré de Turing puisque mon but est justement de l'expliquer et de voir comment on peut aller plus loin. (Néanmoins, soyons honnête, les lecteurs déjà un minimum familiers du concept trouveront sans doute mon billet plus facile à suivre que si on le découvre pour la première fois ici.)

Mon but ici est d'abord de définir la notion (tout à fait standard) de réduction de Turing et de degré de Turing, puis de présenter des extensions de ces notions qui me semblent à la fois très importantes et profondément naturelles. J'ai appris l'existence de ces notions en lisant deux articles d'un certain Takayuki Kihara, Lawvere-Tierney topologies for computability theorists et Rethinking the notion of oracle (et dans une moindre mesure Degrees of incomputability, realizability and constructive reverse mathematics, mais je n'ai pas fini celui-là) : je cherche donc à la fois à faire de la pub pour ces articles et pour les notions qu'ils contiennent (parce qu'elles ont vraiment changé la manière dont je pense à la calculabilité), à montrer que ces notions ne sont pas terriblement techniques, et aussi simplement à assurer ma propre compréhension de ces articles en en réexposant certains bouts à ma façon. En outre, j'espère avoir apporté quelques éléments d'intuition utiles derrière certaines des définitions ou des concepts que j'expose. Je trouve particulièrement intéressante la notion de « co-non-déterminisme » (le passage du niveau T2 au niveau T3), donc mon but est notamment de faire de la pub pour ce concept (qui pourrait sans doute s'avérer fécond en-dehors de la calculabilité).

(Notons que j'attribue ces notions à Kihara, qui les a au moins synthétisées, et c'est par lui que je les ai apprises ; mais je ne prétends pas qu'il a tout inventé — il a plutôt réussi à relier, reformuler et réexposer de façon extrêmement convaincante des notions dont certaines figuraient déjà ailleurs : je renvoie aux références de ses papiers pour les citations antérieures, mais je peux par exemple mentionner Basic Subtoposes of the Effective Topos de Lee & van Oosten, ou Instance reducibility and Weihrauch degrees de Bauer, qui sont dignes d'intérêt si on apprécie le sujet.)

Bref, je veux commencer par expliquer ce qu'est un degré de Turing ordinaire (celui d'une fonction — totale, simplement valuée — ℕ→ℕ), puis donner trois extensions successives de cette notion (je vais parler de degrés T1, T2 et T3 faute de meilleure terminologie — Kihara n'en introduit pas vraiment). en expliquant ce qu'elles changent, et si possible pourquoi elles sont naturelles et intéressantes, et ce qu'on peut en dire : d'abord (T1) aux fonctions partielles, puis (T2) aux fonctions multivaluées (ou non-déterministes), et enfin (T3) aux « fonctions avec conseil » (une sorte de « co-non-déterminisme »). Enfin, je veux essayer d'expliquer pourquoi on a fait la « bonne » généralisation, et pour ça, je donne, en guise de dessert, une construction tout à fait différente des degrés (T1, T2 et surtout) T3 qu'on aura définis par des opérateurs effectifs locaux (et évoquer brièvement le lien avec le topos effectif, sur lequel j'ai récemment écrit un billet, mais je ne suppose pas qu'on ici l'a lu).

Conseil de lecture (en guise de leitfaden) : Je sais que j'ai tendance à entrer parfois dans de grandes digressions pas forcément tellement utiles. J'ai essayé de les marquer comme telles (par des petits caractères, ou en disant dès le début d'une section qu'on peut sauter celle-ci) ; je n'ai sans doute pas toujours marqué tout ce qui pouvait être sauté, mais les dépendances entre sections ne sont pas énormes. Même si on n'a pas lu tout ce qui précède, je pense que ça vaut la peine de goûter le dessert (surtout si on n'est pas convaincu par l'intérêt des définitions qui ont précédé, car, après tout, il s'agit plus ou moins de les justifier). Et surtout, je pense que ça vaut la peine de jeter un coup d'œil à la définition des degrés T3 pour la définition du « co-non-déterminisme », ou simplement parce que le jeu à trois joueurs entre Arthur, Nimué et Merlin est vraiment rigolo.

Table des matières

T0 : Degrés de Turing ordinaires (fonctions ℕ→ℕ totales simplement valuées)

Réduction de Turing ordinaire et degrés de Turing

La notion la plus standard est la réduction de Turing ordinaire (j'ajoute ordinaire parce que toutes les notions qui viennent peuvent légitiment être aussi qualifiées de réduction de Turing), et je vais commencer par la définir précisément et dire quelques choses basiques à son sujet. Elle concerne les fonctions ℕ→ℕ (c'est-à-dire, totales, prenant une seule valeur pour chaque entier naturel), ou éventuellement ℕ→{0,1} mais ça ne changera rien à l'histoire.

Une fonction f:ℕ→ℕ est dite réductible au sens de Turing (=Turing-réductible) à une fonction g:ℕ→ℕ, ou bien calculable avec g pour oracle, et on note (disons) f ≼T g, lorsqu'il existe une machine de Turing (i.e., un algorithme) qui calcule f en ayant accès à un oracle calculant g, c'est-à-dire un gadget magique capable de fournir à l'algorithme la valeur de g en tout point souhaité.

Plus précisément, f ≼T g signifie qu'il existe une machine de Turing qui, quand on lui donne un entier n en entrée, termine toujours en temps fini et calcule f(n) comme sortie (peu importent les manières dont n et f(n) sont codés sur la bande de la machine de Turing tant que c'est raisonnable), sachant que la machine dispose de l'accès à un oracle qui peut calculer g(m) pour n'importe quel m donné. (Voici un exemple de protocole d'interrogation de l'oracle : la machine écrit m sur un ruban dédié, entre dans un état spécial interrogation de l'oracle, l'oracle remplace m par g(m) et place la machine dans l'état réponse de l'oracle ; mais les détails sont peu importants tant qu'on parle de calculabilité.) La machine peut interroger l'oracle autant de fois qu'elle le souhaite (y compris pas du tout, mais ça ne changerait d'ailleurs rien si on imposait d'appeler l'oracle puisqu'on peut ignorer sa réponse), et elle l'interroge sur les valeurs qu'elle veut et fait ce qu'elle veut des réponses : la réponse de l'oracle pour une valeur m est toujours exactement g(m), et c'est tout. (Le temps d'interrogation de l'oracle est une étape de calcul, mais ceci est peu important puisqu'on parle de calculabilité et pas de complexité.)

En particulier, toutes les fonctions calculables (c'est-à-dire : sans oracle) sont réductibles à n'importe quelle fonction, tout simplement en utilisant un programme qui ne fait aucun appel à l'oracle (en particulier, elles sont réductibles les unes aux autres, ou par exemple à la fonction constante égale à zéro).

J'insiste bien (parce que c'est ce qui va changer dans la suite) sur le fait que cette réduction de Turing « ordinaire » concerne des fonctions totales. Notamment, l'algorithme réputé calculer f en ayant g pour oracle est censé terminer pour toute valeur n qu'on lui fournit en entrée (du moins tant que n est une représentation légitime d'un entier naturel, et la valeur calculée doit aussi en être une ; mais là non plus, ces subtilités ne changent essentiellement rien). Je réitère aussi le fait que la consultation de l'oracle n'est pas limitée (ou payante) : l'algorithme a le droit de s'en servir aussi souvent qu'il le veut.

La réduction de Turing (ordinaire, mais ça restera vrai pour les généralisations que je vais introduire après) ≼T forme ce qu'on appelle un préordre (relation réflexive et transitive) sur l'ensemble des fonctions ℕ→ℕ, c'est-à-dire que :

  • d'une part, f ≼T f : toute fonction f est Turing-réductible à elle-même (c'est évident) ; et
  • d'autre part, f ≼T g et g ≼T h impliquent f ≼T h : si f est Turing-réductible à g et que g est Turing-réductible à h, alors f est Turing-réductible à h (c'est assez facile à voir : si je sais calculer f en utilisant g et que je sais calculer g en utilisant h, alors pour calculer f en utilisant h je vais utiliser l'algorithme qui me permet f au moyen de g et, à chaque fois que cet algorithme fait appel à l'oracle, j'utilise le programme qui me permet g au moyen de h à la place, en utilisant l'oracle donnant h comme boîte noire).

Ce qui manque à une relation de « préordre » pour être un ordre, c'est l'antisymétrie, et c'est justement ce qui justifie la définition suivante.

On dit que f et g sont Turing-équivalentes ou de même degré de Turing quand chacune est réductible à l'autre (i.e., on peut calculer f en ayant un oracle qui donne g, et réciproquement) : c'est-à-dire qu'on note (disons) f ≡T g lorsque f ≼T g et g ≼T f. Ceci est une relation d'équivalence (c'est la notion de relation d'équivalence associée à un préordre) : les classes d'équivalence sont appelées les degrés de Turing. Autrement dit, le degré de Turing [f]T de f est l'ensemble {g:ℕ→ℕ : g ≡T f} de toutes les fonctions ℕ→ℕ qui sont Turing-équivalentes à f, et notamment, elles sont toutes Turing-réductibles les unes aux autres. C'est-à-dire que deux fonctions sont Turing-équivalentes exactement quand elles ont le même degré de Turing.

Intuitivement, un degré de Turing est la mesure de la puissance d'un oracle. On peut aussi considérer que c'est une forme d'« impossibilité à calculer » la fonction ou bien de « quantité d'information » (totale) contenue dans la fonction f (mais ce n'est pas exactement la même façon de la mesurer que, disons, la complexité de Kolmogorov, pour ceux qui savent ce que c'est que ça : il y a des rapports, bien sûr, mais disons très sommairement que le degré de Turing est une mesure plus grossière que la complexité de Kolmogorov ; comme ce n'est pas mon propos ici, je ne vais pas en dire plus).

Le « préordre » de la réduction de Turing devient un vrai ordre (partiel) sur les degrés de Turing : on dit qu'un degré de Turing f est inférieur ou égal à un degré de Turing g, et on note fg, lorsque une (ou, ce qui revient au même, toute) fonction du degré f est Turing-réductible à une (ou, ce qui revient au même, toute) fonction du degré g. (Autrement dit, [f]T ≤ [g]T signifie par définition exactement la même chose que f ≼T g.)

Parmi les degrés de Turing, il en est un plus petit, qu'on note 0, c'est celui des fonctions calculables (c'est notamment celui de la fonction constante égale à 0, c'est-à-dire un oracle qui ne répond rien d'intéressant, et on peut voir ça comme une raison de cette notation ; si on préfère, c'est la puissance des oracles qui n'ont aucun intérêt comme oracles parce qu'on peut les calculer directement sans oracle).

↑Entry #2764 [older| permalink|newer] / ↑Entrée #2764 [précédente| permalien|suivante] ↑

↓Entry #2761 [older| permalink|newer] / ↓Entrée #2761 [précédente| permalien|suivante] ↓

(vendredi)

Vulgarisation sur la notion d'oracle en informatique théorique

Méta : Ce billet est un rejeton d'un autre que j'ai commencé à rédiger sur un sujet technique (à savoir : les oracles en calculabilité au sens de Kihara) : en écrivant ce dernier je me suis dit que j'allais commencer par une introduction générale essentiellement grand public à la notion d'oracle (qu'est-ce que c'est que ce truc et pourquoi on les étudie ?). Mais finalement, comme cette introduction générale devenait un peu longue, et surtout comme elle ne vise en fait pas du tout le même public (ce qui suit ne se veut pas technique, le billet dont il est détaché présuppose des connaissances en calculabilité), et aussi parce qu'il y a toujours un risque que je ne finisse pas ce que je commence, je choisis de la publier séparément, plutôt que risquer de rebuter les lecteurs de l'un ou de l'autre. Du coup, je développe aussi un peu plus largement que ce qui était initialement prévu, au risque de rendre ce billet un peu bancal parce que j'ai repris plusieurs fois certains passages en changeant mon approche (notamment à force d'insérer des explications plus détaillées de choses que j'avais évoquées ailleurs, j'ai créé un certain nombre de redites : je pense qu'elles ne sont pas graves et j'ai la flemme de les traquer).

Quand (si !) je publierai l'autre billet, j'ajouterai un lien ici et réciproquement, pour qu'on puisse les lire successivement comme c'était initialement prévu. • Ajout : c'est ici.

À cause du fait que j'essaie de viser un public très large, je ne vais pas donner de définitions mathématiques précises (si j'utilise un terme technique comme exponentiel, on peut se contenter d'une idée très approximative de ce que c'est) ; mais du coup, il faut que prévienne que je vais dire des choses qui seront parfois techniquement incorrectes (même quand j'oublie de prendre les précautions oratoires du type très grossièrement, approximativement parlant, etc.). J'espère ne rien avoir dit de violemment faux, quand même, mais tout est à prendre avec les pincettes de rigueur : il s'agit juste de donner une toute petite idée du type de questions qu'on peut se poser dans quelques parties de l'informatique théorique et d'un outil intéressant (la notion d'oracle) pour y répondre et poser d'autres questions, pas de rentrer dans le moindre détail technique (pour ça, il y aura le deuxième volet, indépendant de celui-ci).

Pour les lecteurs qui ont la patience d'aller jusqu'au bout, il y a une petite énigme de logique(?) à la fin ; en fait, elle ne nécessite pas d'avoir lu ce qui précède, donc on peut la lire directement. (Bon, je ne sais pas si elle est intéressante, et je ne sais pas non plus à quel point elle est difficile. Je ne suis même pas complètement convaincu qu'elle ait un rapport avec le sujet, même si le contexte où je l'ai lue a clairement un rapport.)

Le concept d'oracle dont il est question ici est vient de l'informatique théorique (le terme oracle apparaît dans la thèse d'Alan Turing en 1938). Je voudrais essayer d'expliquer de façon très informelle, très vague aussi malheureusement (mais, j'espère, du coup, assez grand public) ce dont il est question.

Une partie de l'informatique théorique (l'algorithmique) s'intéresse, de façon positive, à trouver des moyens de résoudre des problèmes (mathématiquement bien définis), c'est-à-dire à concevoir des algorithmes qui les résolvent : un algorithme est un programme, un plan d'opération susceptible d'être mené dans un ordinateur — mais aussi en principe par un humain particulièrement patient — qui effectue une tâche calculatoire donnée. Par exemple, la manière dont on apprend à faire des additions et des multiplications à l'école primaire sont des algorithmes, même si ce ne sont pas forcément les plus intéressants, ils ont le mérite de nous rappeler qu'un algorithme ne tourne pas forcément sur un ordinateur, on peut aussi l'exécuter à la main (ce sera juste quelques milliards de fois plus lent…) ; d'ailleurs, le mot algorithme fait référence au mathématicien persan (écrivant en langue arabe) Muḥammad ibn Mūsá al-H̱wārizmī parce qu'il a décrit toutes sortes de méthodes systématiques pour résoudre des problèmes mathématiques, qu'on peut donc légitimement qualifier d'algorithmes, et c'était plus de 1000 ans avant l'invention des ordinateurs.

(Petite digression sur le terme algorithme : il semble qu'un mélange entre l'incompréhension des journalistes face à tout ce qui est technique et l'approximation des termes utilisés dans le contexte de l'intelligence artificielle ait fait dévier le sens du mot, dans l'image qu'en a le grand public, vers une sorte de synonyme de système opaque auquel on ne comprend rien. Certainement beaucoup de programmes utilisés dans l'ingénierie informatique moderne (notamment tout ce qui relève de l'IA) comportent énormément d'heuristiques et de méthodes mal comprises, parfois même mal comprises de leurs programmeurs ou concepteurs, et dont la réponse est parfois fausse ou mal spécifiée. Mais le sens d'algorithme en algorithmique désigne au contraire un plan bien défini et bien compris qui arrive à un résultat bien spécifié.)

Mais d'autres parties de l'informatique théorique s'intéressent non pas à concevoir des algorithmes efficaces pour résoudre tel ou tel problème, mais à se pencher sur la notion même d'algorithme et les limites théoriques du concept : que peut-on faire avec un ordinateur ?

Spécifiquement, on s'intéresse alors plutôt à des résultats négatifs : plutôt que résoudre tel ou tel problème c'est-à-dire concevoir un algorithme qui le résout, on s'attache à montrer que tel ou tel problème est difficile (long et coûteux) voire impossible à résoudre par un algorithme, ou au moins, à étudier cette difficulté, à la classifier et à la jauger. Je reste délibérément vague sur ce qu'un problème peut recouvrir ici et ce que difficile veut dire, mais je peux délimiter ici trois grands domaines où ce que je veux dire s'applique, et j'en profite pour parler un peu plus longuement de chacun des trois, en gros du plus théorique vers le plus appliqué (il n'est pas nécessaire de lire tout ce que j'écris sur chacun ci-dessous pour passer à la suite, mais je cherche à donner un minimum de contexte) :

  • La théorie de la calculabilité est la branche de l'informatique théorique (possiblement la plus proche des mathématiques pures, et notamment de la logique) qui étudie ce qu'on peut faire algorithmiquement avec des ressources illimitées, c'est-à-dire, en disposant d'un temps illimité et d'une mémoire illimitée. (Le mot illimité signifie ici fini mais arbitrairement grand, sans limite a priori : c'est-à-dire que les algorithmes en question doivent s'arrêter un jour en disant j'ai terminé, mais ils ont le droit de prendre autant de temps qu'ils veulent, tant que ce temps est fini ; idem pour la mémoire : ils ont le droit de stocker toutes les données qu'ils veulent tant que cet espace utilisé reste fini à tout moment. C'est donc la forme la plus abstraite et théorique de la question que peut-on faire avec un ordinateur ? qui est étudiée ici, et elle déborde sur des questions du type comment peut-on imaginer des types de machines fondamentalement et théoriquement plus puissantes qu'un ordinateur même si elles ne sont pas réalisables en pratique ? — mentionnons par exemple que même un ordinateur quantique, qui si on réussissait à en construire serait pour certains types de problèmes incroyablement plus efficace qu'un ordinateur tel que nous disposons actuellement, ne représente pas un saut qualitatif tel qu'il peut intéresser la calculabilité : pour la calculabilité, un ordinateur quantique, un ordinateur classique, un système d'engrenages mécaniques ou encore un humain extrêmement patient et systématique muni d'un stylo et d'un papier et exécutant mécaniquement des opérations prédéfinies valent exactement la même chose.)

    La calculabilité est un peu la mère de l'informatique, parce que c'est au travers de la recherche d'une formalisation de ce qu'est un algorithme, et ce qu'un algorithme peut faire, qu'Alonzo Church et son étudiant Alan Turing sont arrivés au concept de calculabilité ; la définition précise d'algorithme à laquelle Turing est arrivé, la machine de Turing, est considéré comme une préfiguration théorique de ce qu'est un ordinateur.

    Un des thèmes majeurs de la calculabilité, donc, c'est de montrer que, pour des raisons théoriques, certains types de problèmes (mathématiquement bien posés) ne sont pas résolubles algorithmiquement : même avec un temps illimité(-mais-fini) à votre disposition, et autant de mémoire, vous ne pourrez pas écrire un algorithme qui répond à coup sûr à certaines questions qui admettent pourtant une réponse bien définie.

    L'exemple archétypal à ce sujet est le problème de l'arrêt : très grossièrement, ce problème demande justement, donné un algorithme, i.e., une suite d'instructions à exécuter (qui peut, bien sûr, contenir des boucles, du type répéter les instructions suivantes tant qu'une certaine condition n'est pas vérifiée), et des valeurs à fournir en entrée à cet algorithme, si l'algorithme en question finit (i.e., si le calcul aboutit à un résultat). Le théorème majeur de Turing, qui est à la base de la théorie de la calculabilité (et donc, dans un certain sens, de l'informatique ; mais à l'origine il s'y intéressait pour des raisons liées à la logique mathématique et spécifiquement au théorème de Gödel), c'est qu'aucun algorithme ne peut résoudre le problème de l'arrêt : autrement dit, aucun algorithme ne peut dire à coup sûr si un autre algorithme s'arrête au bout d'un temps fini. (La seule façon de savoir est de l'exécuter, ce qu'on peut faire, mais quand on l'exécute, tant qu'il n'est pas fini, on n'est jamais sûr si le programme finira par terminer plus tard.) La raison de cette impossibilité est d'ailleurs étonnamment bête une fois qu'on a fait le travail de formalisation pour rendre rigoureuse la théorie : en gros, si un algorithme existait qui puisse dire à coup sûr si un algorithme donné s'arrête, on pourrait faire un algorithme qui l'interroge et fait le contraire de ce qu'il a prédit, ce qui le met en défaut. (C'est ce qu'on appelle un argument diagonal de Cantor.)

    La calculabilité ne se contente pas, en fait, de définir des problèmes résolubles ou non résolubles algorithmiquement, et de le montrer : il y a des problèmes plus ou moins impossibles à résoudre, et l'étude des degrés d'impossibilité (par exemple les degrés de Turing dont je dirai un mot plus bas, et que je définirai précisément dans le volet technique de ce billet) est un sujet de recherche qui court depuis Turing, mais l'outil de base pour ne serait-ce que formuler ce genre de questions est la notion d'oracle que je vais chercher à introduire ici.

  • La théorie de la complexité [algorithmique], cherche à être plus fine que la calculabilité : alors que la calculabilité donne aux algorithmes l'accès à des ressources (temps, mémoire) illimitées-mais-finies, la complexité s'intéresse à des problèmes résolubles par un algorithme, mais cherche à mesurer combien de temps ou de mémoire (ou parfois d'autres ressources) un algorithme devra utiliser, en fonction de la taille du problème qu'on leur pose, lorsque cette taille devient très grande. (Par exemple, combien d'étapes faut-il pour multiplier deux nombres de 100 chiffres ? de 1000 chiffres ? de 10 000 chiffres ? Avec l'algorithme qu'on apprend à l'école primaire, la réponse est en gros 10 000, 1 000 000 et 100 000 000 respectivement, parce qu'il faut multiplier chaque chiffre du multiplicande par chaque chiffre du multiplicateur avant d'ajouter tout ça : en complexité on appelle ça un algorithme quadratique. En fait, on peut faire beaucoup plus efficacement, et d'ailleurs au moins un algorithme de multiplication plus efficace sur les grands nombres que l'algorithme appris à l'école primaire peut vraiment servir à la main — enfin, pourrait servir à la main si on était dans un monde où nous n'avions pas un ordinateur en permanence avec nous.)

    La complexité est donc une discipline un peu plus applicable au monde réel que la calculabilité : alors que la calculabilité va nous donner des réponses du type vous ne pouvez pas résoudre ce problème avec un ordinateur, quel que soit le temps que vous soyez prêt à attendre ou oui vous pouvez, mais je n'ai aucune idée du temps nécessaire parce que ce n'est pas mon sujet, la complexité va chercher à voir plus précisément dans la deuxième catégorie entre des problèmes théoriquement-résolubles-mais-absolument-pas-en-pratique (un peu comme si vous cherchiez à multiplier à la main deux nombres de 1 000 000 000 000 chiffres… oui, en principe c'est possible) et des problèmes un peu plus abordables en pratique. (La complexité va aussi faire la différence entre différents types d'ordinateurs qui, pour la calculabilité sont équivalents, par exemple un ordinateur quantique permet plus de choses du point de vue de la complexité parce qu'il peut en quelque sorte mener plein de calculs en parallèle ; alors qu'en calculabilité il ne change rien du tout par rapport à un ordinateur classique.)

    Néanmoins, la complexité reste une discipline assez théorique parce qu'elle se penche sur le temps (ou la mémoire, ou une autre ressource) utilisés asymptotiquement : ici, asymptotiquement veut dire quand la taille de l'entrée de notre problème (i.e. l'instance précise) devient extrêmement grande (tend vers l'infini). C'est-à-dire que le but de la complexité n'est pas de savoir si vous allez prendre exactement tel ou tel temps pour multiplier deux grands entiers (disons) mais comment ce temps grandit quand les entiers deviennent très grands (est-ce que doubler la taille des nombres double le temps qu'il faut pour faire la multiplication ? plus ? moins ?). Tout simplement parce que c'est un peu plus abordable comme type de question (et que c'est déjà utile dans la pratique).

    La complexité définit toutes sortes de catégories de problèmes en fonction de la difficulté à les résoudre, mesurée sous la forme des ressources qu'on accepte d'allouer à un algorithme qui les résout. (Par exemple, de façon approximative, un problème est dit EXPTIME ou EXPSPACE s'il existe un algorithme qui le résout et dont le temps d'exécution ou respectivement la mémoire utilisée croît au plus exponentiellement dans la taille de la donnée ; on peut faire énormément de choses avec un temps ou une mémoire exponentielle, donc énormément de problèmes sont dans ces classes, qui ne sont pas d'un grand intérêt pratique, mais c'est quand même plus restrictif que les problèmes tout simplement calculables en ressource illimitées que j'ai évoqués plus haut.)

    Deux classes particulièrement importantes en calculabilité sont les classes P et NP. La classe P est très grossièrement celle des problèmes faciles (un peu plus précisément, ce sont ceux qui sont résolubles par un algorithme qui utilise un temps au plus polynomial dans la taille de l'entrée : linéaire, quadratique, cubique, quelque chose comme ça, mais exponentiel n'est pas permis) ; la classe NP est plus subtile : très grossièrement, ce sont les problèmes faciles à vérifier (mais pas forcément faciles à résoudre ; c'est-à-dire que si vous avez la réponse, la vérification qu'elle est correcte se fait essentiellement selon la classe P, mais par contre, si vous ne connaissez pas la réponse, il est possible qu'elle soit très difficile à trouver ; j'insiste sur le fait que mes explications sont très grossières et que je passe sur plein de subtilités théoriques).

    Un exemple de problème NP très simple à décrire est le suivant : je vous donne un tas de nombres (entiers positifs, disons) et un nombre-cible, et votre but est d'exprimer le nombre-cible comme somme de certains des nombres donnés. (C'est une variante très simple des « chiffres et les lettres » où on n'a le droit qu'à l'addition ! Ou bien imaginez que ce sont des pièces de monnaie dans un système monétaire bizarre, et vous voulez réussir à payer exactement un certain montant cible en ayant dans votre poche des pièces de certains montants donnés. Par exemple, si je vous donne les nombres 1, 3, 8, 17, 32, 51, 82, 127, 216, 329, 611, 956 et 1849, et que je vous demande de faire la somme 2146 avec, ce n'est pas évident d'y arriver sauf à tester énormément de combinaisons ; par contre, vérifier que 1 + 8 + 32 + 82 + 127 + 329 + 611 + 956 = 2146 est un calcul facile.)

    Parmi les classes que j'ai pas-vraiment-définies-mais-un-peu-évoquées, on a P ⊆ NP ⊆ EXPTIME, le symbole ‘⊆’ signifiant ici est inclus dans, c'est-à-dire que tout problème P (facile à résoudre) est en particulier NP (facile à vérifier), et que tout problème NP est lui-même, en particulier, EXPTIME (résoluble en temps exponentiel). (Ce dernier est à son tour inclus dans EXPSPACE mais peu importe.) On sait par ailleurs montrer qu'il existe des problèmes qui sont dans EXPTIME mais qui ne sont pas dans P (et on sait en décrire explicitement), autrement dit, des problèmes résolubles en temps exponentiels mais pas faciles pour autant (pas résolubles en temps polynomial) : ce n'est pas très surprenant, parce qu'une exponentielle grandit vraiment très vite, donc il n'est pas surprenant que certains problèmes puissent se résoudre en un temps exponentiel mais pas en un temps beaucoup plus limité, mais encore fallait-il le prouver (ce n'est pas très difficile, mais ce n'est pas complètement évident non plus). Bref, si voit P ⊆ NP ⊆ EXPTIME comme trois boîtes imbriquées, la plus à gauche est effectivement strictement plus petite que la plus à droite. Mais la question se pose de savoir comment est celle du milieu. En fait, on ne sait pas la situer ni par rapport à celle de gauche ni par rapport à celle de droite.

    Spécifiquement, une question centrale de la théorie de la complexité est de savoir si P=NP (en gros, est-ce que tout problème facile à vérifier est, en fait, facile à résoudre ?). On pense très fortement que la réponse est non (i.e., qu'il existe des problèmes qui sont dans NP et qui ne sont pas dans P ; on en a même plein de candidats, d'ailleurs celui que j'ai donné plus haut en est un), mais on ne sait pas le prouver (l'enjeu, ici, est de prouver rigoureusement qu'un problème est difficile au sens où il ne peut pas exister d'algorithme qui le résout facilement). Cette question PNP est même mise à prix à 1 000 000 $ (et attire régulièrement des « solutions » incorrectes de toutes parts).

    Pour en savoir plus sur la situation en complexité, cet article récent de vulgarisation (costaud !) dans le magazine Quanta, quoique long, n'est pas mauvais pour donner un aperçu, et expliquer un peu mieux que ce que je l'ai fait ce que c'est que cette histoire de PNP, ce qu'on sait dire à son sujet et quelle est la difficulté. Ce n'est pas vraiment mon propos ici d'en dire plus ici.

  • La cryptographie (enfin, peut-être que je devrais plutôt dire cryptologie ici) est l'étude scientifique de la sécurité de l'information : il s'agit de développer des techniques de chiffrement (comment transformer un message en un chiffré qui ne puisse être déchiffré qu'en ayant accès à une clé) ou ayant trait à d'autres questions de sécurité de l'information (signature électronique, authenticité, non-répudiation, partage de secrets, ce genre de choses). Mais plus précisément, ici, au sein de la cryptographie, j'ai à l'esprit la cryptographie à clés publiques (voir ce billet récent pour une explication de ce que ça signifie ; ce n'est pas très important ici).

    Une différence importante entre la calculabilité/complexité et la cryptographie est qu'en cryptographie il y a un adversaire (par exemple, s'agissant d'un chiffrement, l'adversaire est un attaquant hypothétique qui essaie d'obtenir des informations sur le message sans avoir la clé de déchiffrement, ou peut-être sur la clé en ayant connaissance du message et du chiffré, ou des variantes autour de ces questions). En calculabilité ou en complexité on s'intéresse à la difficulté de problèmes parce que ça mettra une borne sur ce que nous pourrons faire. En cryptographie, on s'intéresse à la difficulté plutôt parce que ça peut représenter un travail pour l'attaquant (donc la difficulté est souhaitable !). Spécifiquement, on voudrait concevoir des méthodes de chiffrement qui soient faciles à utiliser (c'est-à-dire, peu coûteuses algorithmiquement) quand on connaît la clé, mais extrêmement difficiles à casser, c'est-à-dire pour l'attaquant qui ne connaît pas la clé, et si possible, on voudrait prouver cette difficulté, ou au moins avoir des raisons un peu plus tangibles que je ne sais pas faire, donc c'est sans doute compliqué.

Bref, dans ces trois domaines (et il y en a sans doute d'autres dont j'ignore tout ou qui ne me viennent pas à l'esprit), pour des raisons un peu différentes et avec des notions de problème et de difficulté différentes, on peut chercher à montrer qu'un certain problème est difficile (voire, s'agissant de la calculabilité, impossible, mais je vais ranger ça sous l'étiquette vague difficile), ou étudier sa difficulté.

Bon, mais comment montre-t-on qu'un problème est difficile ?

↑Entry #2761 [older| permalink|newer] / ↑Entrée #2761 [précédente| permalien|suivante] ↑

↓Entry #2752 [older| permalink|newer] / ↓Entrée #2752 [précédente| permalien|suivante] ↓

(mardi)

Sur le topos effectif

Avant-propos

Le but ce de billet interminable est de donner (sans trop de prérequis, cf. plus bas) quelques explications, la définition, et quelques propriétés autour du topos effectif de Hyland. C'est un sujet sur lequel je m'étais promis de parler sur ce blog il y a un moment déjà. Je n'ai cependant pas vraiment suivi mon plan initial, qui était plutôt de faire d'abord une série de billets (en principe indépendant mais qu'il aurait été conseillé de lire dans l'ordre) pour expliquer au préalable l'idée générale du concept de topos et leur logique interne, puis les topos de faisceaux sur un espace topologique, avant d'en venir au topos effectif (que j'ai tendance à imaginer comme plus difficile à comprendre, mais peut-être que je me trompe, en fait). Seulement je me suis retrouvé (pour lire des choses sur un sujet connexe[#]) à ré-apprendre la définition du topos effectif après l'avoir oubliée pour la 42e fois environ, et j'ai pensé que la meilleure façon de la retenir et de m'assurer que j'en avais compris les bases, serait de me forcer à l'expliquer ici, autant que possible de mémoire, et, de fait, ça m'a permis de me rendre compte de plein de subtilités qui m'avaient d'abord échappé : voici pour la genèse de cette entrée, qui s'est évidemment avérée beaucoup plus longue qu'initialement prévue, et que sans doute personne ne lira mais ce n'est pas grave parce qu'elle m'aura servi à moi.

[#] En fait, pour expliquer d'où je viens pour les gens qui connaissent déjà le sujet, ces jours-ci j'essaie épisodiquement de comprendre trois articles que je considère à la fois très intéressants et très importants (pas tellement pour leurs résultats que pour le point de vue, surtout s'agissant des deux derniers), et dont je reparlerai sans doute une autre fois, d'un certain Takayuki Kihara : ① Degrees of incomputability, realizability and constructive reverse mathematics, ② Lawvere-Tierney topologies for computability theorists et ③ Rethinking the notion of oracle (ils peuvent se lire indépendamment les uns des autres et aussi indépendamment de la notion de topos effectif, mais toutes ces choses s'éclairent nettement les unes les autres). Notamment, les deux derniers articles suggèrent que la « bonne » notion d'oracle en calculabilité est celle de topologie de Lawvere-Tierney sur le topos de Kleene-Vesley, et donc j'essaie de me faire une intuition du pourquoi et du comment. [Ajout : à ce sujet, voir ce billet ultérieur.]

Cette genèse peut aussi expliquer le style inhabituellement brouillon, vu que j'avais commencé par me dire que j'allais juste donner la définition et rien d'autre, et au fur et à mesure que je l'écrivais je m'apercevais soit que je devais d'abord expliquer ceci ou cela, soit qu'il fallait bien que je dise un mot sur telle chose que j'avais mal comprise, ou simplement parce que je me suis dit que je ne pouvais pas m'affranchir d'un bout d'explication intuitive pour adoucir une présentation trop formelle. Bref, c'est un peu le bordel, surtout que j'ai plusieurs fois changé l'ordre dans lequel je disais certaines choses, et je n'exclus pas d'avoir commis des cercles vicieux de références, mais j'espère que ce qui suit a quand même un intérêt, surtout que ce n'est pas évident de trouver des textes où les choses sont bien expliquées. (Notamment si on ne veut pas savoir ce qu'est un tripos — et personnellement je préfère ne pas avoir à savoir ce qu'est un tripos, donc je ne parlerai pas du tout de tripos dans la suite.)

En plus de ça, je me suis très peu relu, et maintenant que ce billet est fini je n'ai plus vraiment le courage de le relire systématiquement. (Cet avertissement est valable pour toutes les entrées de ce blog, mais celle-ci est particulièrement propice à engendrer des fautes de frappe idiotes donc il y en a certainement à foison.)

Bref, je ne sais pas à quel point ce qui suit est compréhensible, mais j'ai fait un certain effort pour limiter les prérequis : en principe, pour l'essentiel de ce billet je ne suppose du lecteur qu'une familiarité avec la théorie élémentaire des ensembles et les rudiments de la calculabilité ; il n'est pas nécessaire, notamment, de savoir ce qu'est un topos (et d'ailleurs, je ne l'expliquerai pas, je me contente de définir le topos effectif), ni même une catégorie (mais ça doit quand même aider). Je suppose qu'on sait ce que c'est qu'une formule logique (connecteurs et quantificateurs, ce genre de choses), mais guère plus : il n'est pas vraiment nécessaire de savoir ce qu'est la logique intuitionniste, mais c'est utile, surtout à partir de la partie qui parle de réalisabilité, d'en avoir une certaine idée, et la lecture de ce billet ou surtout celui-là peuvent remplir ce prérequis faible. Je ne suppose pas non plus que le lecteur a lu mon précédent billet sur la réalisabilité, mais ça peut aider à motiver les définitions (le topos effectif est une généralisation de la réalisabilité de Kleene). Vers la fin du billet, je suppose la familiarité avec quelques concepts plus sophistiqués (coupures de Dedekind, ordinaux, des choses de ce genre), mais comme il s'agit de petits bouts assez indépendants les uns des autres, on doit pouvoir sauter ce qu'on ne comprend pas.

En tout cas, j'espère au moins avoir réussi à écrire quelque chose de plus clair que l'article Wikipédia ou celui du nLab.

Si on veut en savoir plus que ce qui est expliqué ici (ou corriger les bêtises que j'aurai certainement écrites), le mieux est sans doute de se tourner vers le livre de van Oosten, Realizability: An Introduction to its Categorical Side (2008), qui contient essentiellement tout ce que je raconte ici, mais il vaut mieux sauter directement au chapitre 3 si on ne veut pas entendre parler de tripos. On peut aussi regarder l'article de Bernardet & Lengrand, A simple presentation of the effective topos (ici sur l'arXiv), même si je ne suis pas persuadé que leur présentation soit vraiment plus simple que la version usuelle, elle a le mérite d'être assez compacte et contenue. L'article original de Hyland s'appelle The Effective Topos, et il est paru p. 165–216 dans les actes The L.E.J. Brouwer Centenary Symposium édité par Troelstra & van Dalen (1982) : en voici une version retypographiée et le scan de la version d'origine (disponible sur Sci Hub si vous n'y avez pas accès par ce lien).

Ajout () : on me signale en commentaire ce texte d'Ingo Blechschmidt (un chapitre du livre Exploring mathematical objects from custom-tailored mathematical universes édité par Oliveri, Ternullo et Boscolo, qui est plutôt de portée philosophique) ; cela semble en effet une bonne introduction : il développe de façon pédagogique (et en commençant de façon très informelle) le point de vue les topos comme des mondes mathématiques alternatifs ; néanmoins, il ne donne pas une vraie définition du topos effectif (juste comme une complétion de la catégorie des assemblées). Tant qu'à faire, je peux aussi signaler les notes d'Andrej Bauer sur la réalisabilité, qui sont à l'état d'ébauche au moment où j'écris : ce qui est là est très bien expliqué, mais c'est encore incomplet, et notamment, il n'y a pas de définition du topos effectif.

Ajout () : ce billet ultérieur sur diverses généralisations des degrés de Turing (et sur ce qui est, en fait, les topologies de Lawvere-Tierney sur le topos effectif), quoique indépendant de celui-ci, a néanmoins un rapport assez étroit.

Ajout () : ce billet ultérieur sur la réalisabilité propositionnelle (qu'on peut lire avant, ou après, ou indépendamment) a aussi un rapport étroit avec celui-ci, puisque la réalisabilité propositionnelle est la logique propositionnelle interne du topos effectif.

Table des matières

Motivation

☞ Un monde de la calculabilité

Bref, le but est de donner ci-dessous la définition du topos effectif, c'est-à-dire des « objets » et des « morphismes » du topos effectif, et ensuite de la « réalisabilité » des formules logiques dont les variables sont « typées » par les objets du topos effectif. (Tous les mots entre guillemets doivent être expliqués plus bas.) Pour essayer de donner quand même un avant-goût de quoi il est question avant de passer aux définitions proprement dites, un objet du topos effectif va être une structure qui ressemble à un ensemble, et un morphisme va ressembler à une application, mais l'idée est de construire une sorte de monde mathématique alternatif (sujet aux lois de la logique intuitionniste, cf. ici et surtout ), ça c'est en gros le sens du mot topos, mais ce topos précis ayant la propriété remarquable que toute fonction des entiers vers eux-mêmes est calculable (au sens de Church-Turing), d'où le terme de effectif, et accessoirement toute fonction réelle est continue. (Ces affirmations étant certainement réfutables en logique classique, il est nécessaire de passer à une logique plus faible comme la logique intuitionniste pour espérer les rendre possibles.)

☞ Vérité par témoignages

Toujours pour donner une idée très vague et en agitant les mains de ce dont il va s'agir, le cœur de l'idée du topos effectif est d'utiliser en quelque sorte, les parties de ℕ (i.e., les ensembles d'entiers naturels) comme des sortes de valeurs de vérité (avec les opérations ⊓,⊔,⇛ que je vais définir ci-dessous pour tenir lieu de la conjonction, de la disjonction, et de l'implication logique). De façon un tout petit peu moins vague, pour différentes sortes d'affirmations logiques, le topos effectif va introduire une partie de ℕ (plus bas, je noterai ⟦φ⟧ pour la « valeur de vérité » associée à une formule logique φ), qu'on appellera l'ensemble de ses « réalisateurs » : le terme classique est de dire que n réalise φ pour dire que n appartient à la partie en question (n ∈ ⟦φ), mais je préfère, intuitivement, parler de témoignages de la véracité de φ.

Même si j'en suis juste à une explication très vague et informelle, profitons-en pour dissiper un malentendu possible dans l'idée qu'on peu se faire : la taille de la partie n'importe pas, il suffit de disposer d'un seul « témoignage » pour conclure que φ est valable dans le topos effectif ; ce n'est pas parce que la partie est plus grande qu'on conclut que l'affirmation est plus vraie, la seule chose qui importe est d'arriver à trouver un élément dedans : si ∅ représente le « faux », le « vrai » peut se représenter aussi bien par ℕ ou {0} ou {42}. Du coup, on peut se demander pourquoi il n'y a pas juste deux valeurs de vérité, le vide qui représente le faux, et n'importe quel ensemble habité[#2] qui représente le vrai, et de fait c'est bien le cas quand il n'y a aucun paramètre libre, mais dès que la partie dépend de paramètres, il va y avoir des parties habitées où il sera plus ou moins facile de trouver un élément. Dit comme ça, c'est désespérément vague, mais j'espère que ça aidera à comprendre un peu mieux les définitions précises qui vont suivre.

[#2] Le mot habité (pour un ensemble) signifie simplement non-vide. Je vais dire plus bas pourquoi je l'utilise.

☞ Ensembles avec égalité-existence

Toujours de façon très vague, un objet du topos effectif sera la donnée (X,E) d'un ensemble X (au sens usuel) muni d'une « fonction d'égalité-existence », qui à un couple (x,y) d'éléments de X va associer une partie de ℕ qui indique la « valeur de vérité » du fait que x et y existent et sont égaux (on pourrait certainement séparer les deux rôles en une fonction d'existence et une fonction d'égalité, mais ce serait techniquement moins commode), cette fonction étant symétrique et transitive en un sens qu'on va expliquer plus bas (mais pas réflexive, parce que la réflexivité va servir à mesurer l'existence). Et un morphisme entre objets du topos effectifs est défini, en gros, par une fonction qui indique, de même, la « valeur de vérité » du fait que x est envoyé sur y par le morphisme. Maintenant il s'agit de rendre précises ces idées que je viens de dire de façon très vague.

↑Entry #2752 [older| permalink|newer] / ↑Entrée #2752 [précédente| permalien|suivante] ↑

↓Entry #2721 [older| permalink|newer] / ↓Entrée #2721 [précédente| permalien|suivante] ↓

(vendredi)

(Nouvelle tentative d')introduction aux mathématiques constructives : histoire, motivations et principes

Méta : J'ai déjà fait plusieurs tentatives pour expliquer sur ce blog ce que sont les mathématiques constructives et comment elles fonctionnent (notamment ici — où j'ai tenté d'expliquer les règles de la logique intuitionniste mais en même temps je me suis embourbé dans des explications sur ce que je devrais ou voudrais écrire —, et ici — où j'ai publié l'introduction / motivation d'une entrée que j'avais commencé à écrire et qui, à cause de ça, s'est complètement embourbée). Je considère ces tentatives comme des échecs. Une raison de cet échec est que je n'ai pas correctement expliqué, pour commencer, de quoi il s'agit et pourquoi on s'y intéresse. Plus tard, j'ai participé à un podcast avec mes collègues Sylvie Benzoni-Gavage et David Monniaux sur le thème mathématiques honnêtes (l'expression vient d'une citation de Poincaré, qui a ensuite donné lieu à un échange sur Twitter), où il a été question au passage d'essayer d'expliquer ce que sont les maths constructives ; mais là aussi, j'ai peur de m'être très mal débrouillé quand j'ai évoqué le sujet. Je voudrais donc faire une nouvelle tentative, en reprenant à zéro. Comme cette tentative-ci est de nouveau en train de s'embourber (ça fait maintenant quelque chose comme six mois que j'ai commencé à l'écrire), je me force à en publier le début comme une entrée autonome, où je parle un petit peu de l'histoire et des motivations, puis je commence à développer quelques principes, quitte à ce que la fin soit un peu abrupte.

Au moins le début de cette entrée (où je parle plus d'histoire des mathématiques que de mathématiques) devrait être très largement compréhensible, quitte à sauter quelques passages un peu plus techniques.

De façon extrêmement schématique (et juste pour lancer le sujet : ceci ne se prétend pas être une explication), les mathématiques constructives sont des mathématiques faites dans une logique particulière appelée logique intuitionniste. (Les termes constructif et intuitionniste sont un peu — mais pas complètement — interchangeables.) Cette logique intuitionniste diffère de la logique usuelle dans laquelle on fait des mathématiques (logique classique) en ce qu'elle abandonne une règle de raisonnement, à savoir la loi du tiers exclu, laquelle affirme — schématiquement — que ❝si quelque chose n'est pas faux alors ce quelque chose est vrai❞. (Ou, ce qui revient au même, la logique intuitionniste abandonne le principe du raisonnement par l'absurde où, pour montrer que P est vrai, on suppose « par l'absurde » que P est faux, on aboutit à une contradiction, et on en conclut que P devait être vrai.) La logique intuitionniste est donc plus faible que la logique classique : du coup, prouver quelque chose en logique intuitionniste est plus difficile ou, si on veut, il y a moins de théorèmes (un théorème en logique intuitionniste est encore un théorème en logique classique, mais un théorème en logique classique n'est pas forcément un théorème en logique intuitionniste) ; donc obtenir un résultat « constructivement » est plus fort que l'obtenir « classiquement », et l'étude des maths constructives consiste en bonne partie à se demander quels résultats classiques sont encore valables constructivement, ou, à défaut, comment on peut les démontrer autrement, ou sinon, les reformuler, pour obtenir quelque chose de constructif.

☞ Oui mais pourquoi donc faire ça ? Pourquoi affaiblir la logique ? Pourquoi précisément comme ça ? Pourquoi remettre en cause la loi du tiers exclu ? Quel est l'intérêt de la démarche ? Quelles sont les règles du jeu ? Et pourquoi ces mots constructif et intuitionniste ? C'est ce que je veux essayer d'expliquer ici.

Plan :

Un (tout petit) peu d'histoire du constructivisme en mathématiques

Commençons par essayer d'expliquer comment cette notion est apparue. Qu'on me permette de faire de l'histoire des maths très schématique et simplifiée, juste pour situer un peu les choses et sans prétendre décrire complètement des positions philosophiques forcément assez complexes :

La controverse Hilbert-Brouwer

L'histoire commence au début du XXe siècle à un moment où les fondements des mathématiques commencent à se mettre en place : le monde mathématique a vu se mettre en place des approches rendant l'Analyse plus rigoureuse (Cauchy, Weierstraß, Dedekind…), l'axiomatisation de l'Arithmétique (Peano), la naissance de la théorie des ensembles (Cantor) et de l'idée que celle-ci peut servir à soutenir l'ensemble des mathématiques (Frege). Deux courants apparentés émergent en philosophie des mathématiques, le logicisme et le formalisme (voir ici pour une explication de la différence — qui ne m'intéresse pas tellement ici), qui proposent de ramener, autant que possible, la pratique mathématique à l'application de règles de déduction logique à partir d'un jeu d'axiomes (voire de pure logique dans le cas du logicisme).

Chef de file du courant formaliste, David Hilbert propose, en 1904, un programme visant à fonder les mathématiques sur une base axiomatique : au moins pour une branche donnée des mathématiques, on devrait (selon le programme de Hilbert), trouver des axiomes, formaliser ces axiomes (c'est-à-dire leur donner une forme extrêmement précise ramenant, en principe, la démonstration, à un simple jeu de manipulation de symboles), et idéalement, prouver mathématiquement que les axiomes en question permettent de démontrer ou réfuter tout énoncé syntaxiquement licite, et qu'ils ne comportent pas de contradiction. (La dernière partie de ce programme sera sérieusement mise à mal à cause des limitations posées par le théorème d'incomplétude de Gödel — voir notamment ici —, mais ce n'est pas ce qui me préoccupe ici. On dit parfois que Gödel a porté le coup de grâce au programme de Hilbert, mais il me semble, au contraire que, une fois acceptées ces limitations, le programme de Hilbert a été un grand succès et qu'il est largement admis que les mathématiques ont besoin d'axiomes et de règles de déductions claires même si, dans la pratique, les démonstrations se font généralement en langage informel.)

Hilbert accueille aussi avec enthousiasme la théorie des ensembles, qu'il qualifie de paradis créé par Cantor, parce qu'il permet de rendre précises les constructions admises en la matière, et il accepte, au passage, ses infinis de différentes tailles. (Qui font maintenant partie des mathématiques « standard », un nouveau signe de succès du programme de Hilbert.) Il s'oppose en cela au courant finitiste, dans lequel s'inscrit notamment Kronecker (selon lequel les entiers naturels ont été créés par le bon Dieu, tout le reste est l'œuvre de l'homme) et dans une moindre mesure Poincaré, qui rejettent ou regardent au moins avec soupçon les constructions infinies.

Les règles de logique admises par le programme formaliste, les règles de la logique « classique », permettent souvent de montrer qu'un certain objet mathématique existe sans pour autant exhiber cet objet. Ces raisonnements prennent typiquement une forme du style : je veux montrer qu'il existe un <machin> ; supposons au contraire que <machin> n'existe pas : dans ce cas <…diverses conséquences sont tirées…>, ce qui est une contradiction : ce n'est donc pas possible, et ceci prouve que <machin> existe. À aucun moment le <machin> n'est construit : il est simplement montré qu'il ne peut pas ne pas exister : classiquement, cela revient exactement au même qu'exister, mais cela ne permet pas d'expliciter <machin> ; on peut donc dire que la preuve n'est pas constructive.

Deux exemples significatifs de telles preuves non constructives (ou considérées à l'époque comme non constructives, parce qu'en fait, tout dépend de la manière précise dont on les formalise et/ou démontre) sont donnés par deux théorèmes mathématiques très importants et dus, justement, aux deux protagonistes de notre histoire. Il s'agit d'une part du théorème de la base de Hilbert (1888), avec comme conséquence le fait que les anneaux d'invariants polynomiaux (peu importe de quoi il s'agit) sont finiment engendrés, sans que la démonstration (au moins dans sa forme initiale) exhibe explicitement un système générateur ni ne permette de le calculer, ce qui aurait fait dire à Paul Gordan, le grand spécialiste des invariants, ce n'est pas des mathématiques, c'est de la théologie (en fait, cette phrase, comme toutes les meilleures citations, est probablement apocryphe). Et d'autre part, le théorème du point fixe de Brouwer (c. 1910), dû au topologiste Luitzen Egbertus Jan Brouwer, lequel théorème affirme que toute fonction continue d'une boule dans elle-même a un point fixe, sans que la démonstration (au moins dans sa forme initiale) exhibe un tel point fixe ni ne permette de le calculer.

Ces preuves non-constructives heurtent la conception philosophique de Brouwer, selon lequel prouver l'existence d'un objet ne doit pouvoir se faire qu'en construisant l'objet en question. Il est également en désaccord, plus généralement, avec l'idée formaliste de ramener les mathématiques — au moins en principe — à une application mécanique de règles logiques à partir d'axiomes : pour Brouwer, la créativité de la démarche du mathématicien ne peut pas se ramener à une application formelle de règles. Par ailleurs, Brouwer se rapproche de l'école finitiste par son scepticisme au sujet des constructions infinies arbitraires autorisées par la théorie des ensembles de Cantor (même si on ne peut pas vraiment dire que Brouwer soit un finitiste). Enfin, son intuition du continu, c'est-à-dire de la droite réelle, ne s'accorde pas vraiment avec la formalisation des nombres réels par Dedekind, mais je dois dire que je ne prétends pas vraiment comprendre ce que Brouwer pensait exactement des nombres réels (par opposition aux réinterprétations ultérieures de l'intuitionnisme). Bref, pour ces différentes raisons, Brouwer s'oppose à la philosophie formaliste défendue par Hilbert (ainsi qu'à sa cousine, le logicisme) et, une fois qu'il a obtenu un poste permanent en 1912, il développe ses propres idées auxquelles il donne le nom d'intuitionnisme.

↑Entry #2721 [older| permalink|newer] / ↑Entrée #2721 [précédente| permalien|suivante] ↑

↓Entry #2698 [older| permalink|newer] / ↓Entrée #2698 [précédente| permalien|suivante] ↓

(mercredi)

Sur une entrée en cours d'écriture

Métamotivations : [bon, sérieusement, je ne sais pas ce que sont des métamotivations, mais je trouve ce mot trop rigolo pour ne pas l'écrire]

J'ai commencé il y a quelques semaines à écrire une entrée de ce blog (je vais dire dans un instant à quel sujet, mais pour l'instant ce n'est pas important), et il est arrivé ce qui m'arrive trop souvent : je pars plein d'enthousiasme en me disant que je vais réussir à condenser à sa substantifique moëlle un sujet fort copieux, en même temps que le vulgariser, je me mets à taper, taper, taper, la condensation espérée n'a pas vraiment lieu, au contraire, je me rends compte qu'il faut que je parle de ceci, puis de cela, le texte que j'écris devient de plus en plus indigeste, et, pire, alors que je partais tout content de me dire que l'effort d'exposition me permettra d'y voir plus clair sur le sujet dont je parle, plus je l'écris plus je commence à en avoir marre de l'écrire, donc plus je traîne à m'y mettre, et en plus quand je m'y mets je mets tellement de temps à relire ce que j'ai déjà écrit que les progrès initialement rapides deviennent de plus en plus lent, et cette lente agonie ne prend fin que quand je décide de bouger le billet en cours d'écriture dans un fichier d'entrées inachevées qui prend de plus en plus la forme d'un cimetière, parce que sinon il bloque l'écriture de toute nouvelle entrée.

(Oui, mes phrases sont trop longues. Je sais.)

Que faire quand ce genre de choses se produit ? (C'est fréquent, et j'ai déjà dû en parler plein de fois.) Je n'ai toujours pas trouvé de réponse satisfaisante. Je peux jeter l'éponge et publier l'entrée dans son état inachevé, mais c'est un peu renoncer à toute possibilité de l'améliorer ultérieurement, ce qui me déplaît (il m'arrive bien sûr de modifier des entrées déjà publiées, mais c'est pour ajouter des petites précisions mineures : personne ne va tout relire pour ça). Je peux publier les parties qui sont à peu près présentables (ces entrées fort longues se découpant en parties et sous-parties, je peux publier, disons, le premier chapitre), mais je n'aime pas beaucoup non plus parce que je risque de vouloir quand même y faire des additions ultérieures, et aussi parce que ça rompt ma promesse implicite d'essayer autant que raisonnablement possible d'écrire des entrées indépendantes sur ce blog. (Promesse qui me semble nécessaire si je veux qu'on puisse lire l'entrée #2698 de ce blog sans avoir lu les 2697 qui ont précédé, ce que sans doute personne n'a fait, je ne suis même pas sûr de l'avoir fait moi-même.) Bon, je suis de mauvaise foi, je peux bien dire je suppose qu'on a lu <telle entrée passée>, d'ailleurs il a dû m'arriver quelques fois de le faire, mais si la partie 2 met des années à arriver, personne ne la lira parce que tout le monde aura oublié la partie 1 et que personne n'aura envie de la relire. Même vis-à-vis de moi-même, quand je publie quelque chose sur ce blog, qui est un peu l'espace de swap de mon cerveau, c'est pour me décharger mentalement en me disant que je peux l'oublier puisque je pourrai toujours me relire plus tard (et du coup je ne le fais généralement pas, justement), et ça ne marche plus vraiment si je continue à vouloir donner une suite.

Mais faute d'avoir décidé, je me dis que je peux au moins publier en avance (quitte à la recopier quand même plus tard, ce n'est pas long ce ne sera pas grave) la partie motivations de l'entrée en question. Ne serait-ce que parce que les motivations, c'est un peu comme les remerciements de thèse, c'est la seule chose que doit lire la majorité des gens ; et ici, ils ont, je crois, un intérêt autonome parce que c'est beaucoup moins technique que ce qui vient (enfin, est censé venir) après ; et je ne crois pas avoir envie de les changer plus tard, et elles ont toute leur place ici puisque, finalement, je suis en train de parler de ma motivation.

(En plus, là, j'ai été aspiré par d'autres préoccupations qui m'ont bouffé plein de temps, donc l'écriture de ce billet-ci a elle-même traîné en longueur !)

Voici donc les motivations de ce billet partiellement écrit :

Motivations et introduction générales

Il y a un certain temps, j'avais publié un billet fort mal écrit sur la logique intuitionniste et les mathématiques constructives, pour essayer d'expliquer de quoi il s'agit. J'aimerais réessayer d'en parler, mais en prenant une approche différente : dans le billet précédent (que je ne vais pas supposer que le lecteur a lu, même si ça peut aider de l'avoir au moins parcouru), j'avais mis l'accent sur les règles de la logique intuitionniste (la syntaxe, si on veut), maintenant je voudrais mettre l'accent sur les « mondes » (j'utilise ce terme de façon délibérément vague et informelle, je vais revenir là-dessus) dans lesquels la logique intuitionniste s'applique — la sémantique si on veut. Je pense en effet qu'on comprend beaucoup mieux l'intérêt de cette logique (au-delà de se dire tiens, je vais m'interdire d'appliquer le tiers exclu et voyons ce qui se passe) si on commence par avoir à l'esprit quelques situations où elle s'applique.

Comme on n'a pas besoin de savoir d'avance ce qu'est la logique intuitionniste pour comprendre ces « mondes », cela peut aider, justement, à l'approcher : de l'« intérieur » ils sont régis par la logique intuitionniste, mais de l'« extérieur » ce sont des objets mathématiques classiques (d'ailleurs manipulés régulièrement par des mathématiciens qui n'ont aucune appétence particulière pour la logique, comme les faisceaux en topologie ou géométrie algébrique). Ils forment donc un pont par lequel un mathématicien classique peut comprendre ou visualiser les objets intuitionnistes.

Mais par ailleurs, ces « mondes » sont intéressants, au-delà de l'aspect logique, pour la source de contre-exemples qu'ils fournissent : un monde dans lequel toutes les fonctions ℝ→ℝ sont continues, par exemple, ou dans lequel toutes les fonctions ℕ→ℕ sont calculables, ou dans lequel le théorème des valeurs intermédiaires ne peut pas être affirmé, ou dans lequel on ne peut pas affirmer qu'une suite croissante bornée de réels converge, cela mérite qu'on s'y intéresse même si on n'a aucun intérêt particulier pour la logique : je pense, et c'est en fait ma principale motivation pour m'y intéresser, que cela permet une meilleure compréhension des objets basiques que sont les entiers naturels, les réels, les fonctions entre eux, de comment ils sont construits et de ce qui permet de démontrer ceci ou cela. (Et en comparaison au degré de technicité nécessaire pour construire des mondes dans lesquels l'axiome du choix ne vaut pas, les constructions ici sont raisonnablement peu élaborées bien que plus dépaysantes, ce qui augmente leur intérêt pédagogique.)

J'utilise ci-dessus le mot monde, délibérément vague : disons un mot à ce sujet. En logique classique, le terme correct pour désigner un monde dans lequel vaut une théorie est celui de modèle (pour montrer qu'une théorie T n'implique pas un énoncé φ, on va construire un modèle de T ne vérifiant pas φ). Il y a plusieurs notions de modèle permettant de donner une sémantique à la logique intuitionniste : modèles de Kripke, par exemple, modèles à valeurs dans une algèbre de Heyting, ou encore topoï. Les « mondes » dont je veux parler sont, en l'occurrence, des topoï, mais je ne compte pas expliquer ce qu'est un topos en général, uniquement en donner des exemples. Pourquoi ? Pas que ce soit immensément compliqué si on connaît un peu de théorie des catégories (encore qu'il y a la subtilité qu'il y a deux sens, apparentés mais distincts, du mot topos : topos de Grothendieck [dans ce cas le pluriel est un topos, des topos] ou topoï élémentaires [dans ce cas le pluriel est un topos, des topoï], ces derniers étant plus généraux que ces premiers), mais je pense que la notion de topos ne peut être correctement comprise qu'en ayant au préalable un stock d'exemples, et il s'agit donc de commencer par là. D'autre part, je ne prétends pas énoncer de résultat de complétude. Disons un mot à ce sujet.

[Le paragraphe suivant est une digression par rapport à mon propos général. On peut le sauter sans perdre le fil.]

Quand on a une théorie logique (ce mot étant pris ici, informellement, dans un sens excessivement vague et général), lui définir une sémantique, c'est définir un tas de mondes possibles (même remarque) qui valident certains énoncés (i.e., certaines choses sont vraies dans tel ou tel de ces mondes), et la moindre des choses est que la sémantique donne raison à la théorie, c'est la partie qu'on appelle la soundness en anglais, et je ne sais pas quel mot utiliser en français (cohérence ?) : dire que la sémantique Muf est sound (sensée ?) pour la théorie Truc, c'est dire que tout ce que la théorie Truc permet de démontrer sera vérifié dans chacun des « mondes » Muf. En général, ce n'est pas difficile, c'est même souvent une évidence tellement évidente qu'on ne se fatigue pas à le dire. (Mais remarquez que les « mondes » dont je veux parler, s'ils sont sound pour la logique intuitionniste, ne le sont pas pour la logique classique, et c'est bien pour ça qu'il y aura des théorèmes des mathématiques classiques qui ne seront pas valables dans certains d'entre eux, du genre le théorème des valeurs intermédiaires.) Mais l'autre chose qu'on veut souvent (mais pas forcément) avec une sémantique, c'est qu'elle soit complète, et là ça veut dire la réciproque : dire que la sémantique Muf est complète pour la théorie Truc, c'est dire que tout ce qui est vérifié dans chacun des « mondes » Muf pourra être démontré dans la théorie Truc. En logique classique du premier ordre avec la sémantique fournie par la notion habituelle de modèle, si vous savez ce que c'est, on a effectivement complétude, et le résultat en question s'appelle le théorème de complétude de Gödel (qui affirme que, dans le contexte du calcul des prédicats du premier ordre en logique classique, si φ est vrai dans tout modèle d'une théorie T alors φ est démontrable à partir de T). La question de la mesure dans laquelle les topoï définissent une sémantique complète par rapport à la logique intuitionniste dépend crucialement de ce qu'on appelle exactement la logique intuitionniste (le problème n'étant pas les règles de déduction mais ce sur quoi on s'autorise à quantifier), et essayer d'expliquer ça, sur quoi je n'ai d'ailleurs pas les idées aussi claires que je voudrais, m'entraînerait à parler de logique d'ordre supérieur, de théorie des types et de choses dont je ne veux pas parler. Donc je vais faire complètement l'impasse sur tout ce qui concerne la complétude, et du coup il n'est pas vraiment pertinent que j'explique ce qu'est un topos, ce qui m'importe ce sont les exemples que je veux exposer et le fait qu'ils soient sound.

[Fin de la digression.]

Ce qui est intéressant à comprendre, aussi, c'est le rapport entre le point de vue « interne » et le point de vue « externe » sur les « mondes » en question : on peut soit se plonger dans un de ces « mondes », le regarder avec les lunettes « internes », auquel cas on a affaire à des ensembles dans un monde de maths intuitionnistes, ou au contraire le regarder « de l'extérieur », auquel cas on a affaire à des objets un peu plus compliqués (faisceaux, par exemple, en tout cas des objets d'une catégorie et c'est cette dernière qu'on appelle topos) mais dans un monde plus familier puisque la logique classique s'applique. Les deux points de vue se traduisent l'un l'autre (du moins, tout énoncé « interne » peut se réécrire de façon « externe », la réciproque n'est pas forcément vraie), ils s'éclairent et se complètent. Ce que je voudrais faire c'est expliquer, sur quelques exemples, comment marche cet aller-retour.

↑Entry #2698 [older| permalink|newer] / ↑Entrée #2698 [précédente| permalien|suivante] ↑

↓Entry #2687 [older| permalink|newer] / ↓Entrée #2687 [précédente| permalien|suivante] ↓

(vendredi)

Comment manœuvrer une voiture dans un tunnel : un peu de géométrie

Mon poussinet s'est acheté une nouvelle voiture. Ou plus exactement, a remplacé un joujou, rouge de chez Honda, thermique et bruyant, par un autre joujou, blanc de chez Tesla, électrique et beaucoup moins bruyant et beaucoup plus Internet of Shit ; mais ce n'est pas mon propos ici d'en parler : le point de départ de ce que je veux dire ici, c'est que le nouveau joujou est assez long et large, et que la descente du parking de notre immeuble est compliquée.

Nous avons trois véhicules et trois places de parking (une achetée avec l'appartement et deux louées à des voisins). Ma moto, bizarrement, ne pose aucun problème pour monter et descendre au parking. Pour la Tuture préférée (qui fait censément 1.74m de large, et 4.15m de long dont 2.51m entre les essieux), le poussinet s'en sort bien (le plus souvent sans marche arrière), mais moi je n'ose pas trop essayer, et c'est d'ailleurs mon principal obstacle à circuler en voiture. Et pour le nouveau joujou (qui fait censément 1.85m de large, et 4.69m de long dont 2.83m entre les essieux), c'est beaucoup plus compliqué : à ce stade, à chaque fois que nous voulons entrer ou sortir du parking, je descends de la voiture, je passe devant, et j'indique au poussinet par des signes de main la distance à gauche et à droite (certes, le joujou a plein de capteurs, mais ils sont essentiellement inutiles dans ces circonstances, parce qu'ils passent juste leur temps à faire bip, et ne détectent pas forcément la « bonne » distance) : il arrive à sortir en une seule fois, mais pour rentrer dans le parking il faut trois ou quatre marches arrière (et la question de pourquoi ce n'est pas symétrique est une de celles que je veux discuter ici).

Pourtant, la descente du parking n'est pas si étroite : elle fait 2.67m de large au point le plus resserré que j'aie mesuré ; cette largeur est un peu stupidement grignotée par le fait qu'il y a des garde-corps (je ne sais pas comment les appeler : une sorte de marche ou de micro trottoirs de part et d'autre de la descente, au niveau du sol, large d'environ 15cm et haute d'environ autant), qui réduit l'espace disponible au niveau des roues à 2.38m au point le plus étroit. Mais bien sûr, la descente est courbe : entre la porte côté rue et la base de la rampe, il y a un changement de cap de 90° (on entre perpendiculairement à la rue Simonet, et on finit parallèlement à elle).

Géométriquement, si j'en crois les plans d'architecte de l'immeuble que j'ai récupérés je ne sais plus comment, la forme est très simple (cf. figure ci-contre) : prenez un quart de cercle de rayon 6.50m et un autre de rayon 5.50m dont les centres sont décalés de 1.75m selon chacun des axes du quart de cercle (donc à distance 1.75m×√2 ≈ 2.47m l'un de l'autre), le centre du petit cercle étant évidemment plus éloigné des arcs eux-mêmes que celui du grand cercle, et ensuite prolongez tangentiellement chacune des deux extrémités de chacun des deux arcs. (En notation SVG et en exprimant les distances en mètres : M 0.00 0.00 L 9.37 0.00 A 6.50 6.50 0 0 1 15.87 6.50 L 15.87 18.38 pour le bord extérieur et M 0.00 2.75 L 7.62 2.75 A 5.50 5.50 0 0 1 13.12 8.25 L 13.12 18.38 pour le bord intérieur.) Ceci fait donc une rampe dont la largeur est de (6.50m−5.50m)+1.75m = 2.75m dans ses parties rectilignes, et de (6.50m−5.50m)+1.75m×√2 ≈ 3.47m dans sa partie courbe, à quoi il faut retirer environ 15cm de garde-corps de part et d'autre comme je l'ai expliqué ci-dessus. J'ai fait apparaître sur la figure des rectangles à l'échelle du joujou du poussinet, mais il n'est pas évident de le placer comme je viens de le montrer (cf. plus loin). L'épaisseur des traits sur la figure est de 30cm (le milieu du trait est au niveau du mur lui-même, le bord intérieur correspond à peu près au bord du garde-corps).

Bon, en plus, la rampe est bien sûr en pente (de 14.38% selon le plan d'architecte, l'hélice étant orientée à main gauche : sur le schéma ci-contre, la sortie côté rue est en bas de la figure, la base de la rampe côté parking est à gauche), mais je ne pense pas que ça joue énormément sur le problème géométrique que je vais évoquer. Par ailleurs, la construction de l'immeuble n'a pas respecté précisément les plans d'architecte et les arcs de cercle ont été approchés par des polygones, donc il y a trois ou quatre points anguleux sur le mur extérieur : je ne sais pas bien si ça joue dans l'explication de l'asymétrie ressentie entre montée et descente, je vais y revenir ; la largeur de la rampe, comme je l'ai dit plus haut, n'est, d'après mes mesures, pas tout à fait égale aux 2.75m contractuels de mur à mur, je l'ai déjà noté.

Mes lecteurs savent que j'aime faire des typologies, alors allons-y. Je peux distinguer trois niveaux au problème d'entrer ou sortir la voiture :

  1. La question purement géométrique (entrer ou sortir la voiture, en supposant une connaissance parfaite de ses dimensions, sa position, la forme de la rampe, etc., donc toutes les distances impliquées), que je vais elle-même ci-dessous subdiviser en trois.
  2. La complication supplémentaire que, assis à la place du conducteur, on voit mal ce qu'on fait, on évalue mal les distances, malgré les rétroviseurs et les diverses caméras de la Tesla, en tout cas, plus mal que quelqu'un qui se tient à distance et qui regarde la voiture de l'extérieur.
  3. La complication supplémentaire qu'une voiture n'avance pas exactement comme on veut (je parle du point de vue de la traction : je mets la question du rayon de braquage sur le chapeau géométrique) : ceci ne concerne pas la Tesla, dont le moteur électrique permet d'avancer aussi lentement qu'on veut, presque millimètre par millimètre, aussi bien en montée qu'en descente, mais le problème se pose avec une voiture thermique si on ne veut pas vitrifier l'embrayage en patinant trop longtemps.

Je veux surtout parler ici du (A), même si (B) et (C) sont aussi problématiques en pratique. Maintenant, même si je le simplifie à outrance en traitant la voiture comme un simple rectangle et en ramenant tout le problème dans le plan, ce que je vais faire, le (A) se subdivise lui-même en trois niveaux de difficulté :

↑Entry #2687 [older| permalink|newer] / ↑Entrée #2687 [précédente| permalien|suivante] ↑

↓Entry #2686 [older| permalink|newer] / ↓Entrée #2686 [précédente| permalien|suivante] ↓

(mercredi)

Trucs et astuces pour tirer au hasard diverses choses

Je rassemble dans cette entrée quelques faits algorithmiques et informatiques qui sont généralement « bien connus » (et franchement assez basiques) mais souvent utiles, et qu'il est possiblement difficile de trouver rassemblés en un seul endroit. Le problème général est de tirer algorithmiquement des variables aléatoires selon différentes distributions, typiquement à partir d'un générateur aléatoire qui produit soit des bits aléatoires (indépendants et non biaisés) soit des variables aléatoires réelles (indépendantes) uniformément réparties sur [0;1]. Je parle d'algorithmique, mais ce n'est pas uniquement sur un ordinateur : ça peut être utile même dans la vie réelle, par exemple si on a une pièce avec laquelle on peut tirer à pile ou face et qu'on veut s'en servir pour jouer à un jeu qui réclame des dés à 6 faces, ou si on a des dés à 6 faces et qu'on veut jouer à un jeu d'aventure qui réclame des dés à 20 faces.

Comment tirer des nombres aléatoires en conditions adversariales ? Je commence par ce problème-ci qui n'a pas de rapport direct avec la suite, mais que je trouve quand même opportun de regrouper avec : Alice et Bob veulent jouer à pile ou face, ou plus généralement tirer un dé à n faces, mais ils n'ont pas de pièce ou de dé en lequel ils fassent tous les deux confiance. Par exemple, Alice a sa pièce fétiche que Bob soupçonne d'être truquée et symétriquement (ou peut-être même que chacun est persuadé de pouvoir tirer des nombres aléatoires dans sa tête mais ne fait évidemment pas confiance à l'autre). La solution est la suivante : chacun fait un tirage avec son propre moyen de son côté, sans connaître le résultat de l'autre, et on combine ensuite les résultats selon n'importe quelle opération (choisie à l'avance !) qui donne tous les n résultats possibles pour chaque valeur fixée d'une quelconque des entrées (un carré latin, par exemple une loi de groupe) ; par exemple, s'il s'agit de tirer à pile ou face, on peut décider (à l'avance !) que le résultat sera pile (0) si les deux pièces ont donné le même résultat et face (1) si elles ont donné un résultat différent ; s'il s'agit de dés à n faces donnant un résultat entre 0 et n−1, on fait la somme modulo n (c'est-à-dire qu'on fait la somme et qu'on soustrait n si elle vaut au moins n, pour se ramener à un résultat entre 0 et n−1). Bien sûr, il faut un protocole pratique pour faire en sorte que chacun fasse son tirage sans connaître le résultat de l'autre (sinon, s'il a moyen de tricher, il pourra adapter le résultat en conséquence) : physiquement, chacun peut faire son tirage en secret et écrire le résultat secrètement sur un papier placé dans une enveloppe scellée, qu'on ouvrira une fois les deux tirages effectués (en fait, il n'y a que le premier tirage qui a besoin d'être fait de la sorte) ; cryptographiquement, on procède à une mise en gage (typiquement au moyen d'une fonction de hachage, mais je ne veux pas entrer dans ces questions-là). On peut bien sûr généraliser à plus que deux joueurs (en faisant la somme modulo n de nombres tirés par chacun des participants). Le protocole garantit que le résultat sera un tirage uniforme honnête si l'un au moins des participants désire qu'il le soit (et a les moyens de réaliser un tirage honnête) : bien sûr, si aucun des participants ne le souhaite, c'est leur problème, donc on s'en fout. Même si on abandonne toute prétention à ce que les participants tirent leur valeur aléatoirement et qu'on s'imagine qu'ils la choisissent, tant qu'il s'agit d'un jeu à somme nulle, la stratégie optimale est bien de tirer au hasard (et encore une fois, s'ils veulent coopérer pour un autre résultat, tant qu'il n'y a pas d'autre partie impliquée, c'est leur problème, de même s'ils s'imaginent pouvoir faire mieux que le hasard en utilisant, par exemple, une prédiction psychologique).

Je ne sais plus où j'avais lu que ce protocole a été découvert (il l'a certainement été de nombreuses fois !) à la renaissance. Dans mon souvenir, le découvreur proposait même que, pour une question de la plus haute importance, on demande au pape de faire un des tirages en plus de tous les autres participants. Je ne sais d'ailleurs pas si ce protocole a un nom standard.

Comment tirer une variable de Bernoulli de paramètre p à partir de bits aléatoires ? Autrement dit, ici, on a fixé p, et on veut faire un tirage aléatoire qui renvoie oui avec probabilité p et non avec probabilité 1−p, et pour ça, on dispose simplement d'une pièce qui renvoie des bits aléatoires en tirant à pile (0) ou face (1), et on souhaite effectuer les tirages de façon économique. Par exemple, combien de tirages de pièce faut-il, en moyenne, pour générer un événement de probabilité 1/3 ? Il s'avère, en fait, que quel que soit p on peut s'en tirer avec deux (2) tirages en moyenne (je veux dire en espérance). Pour cela, on peut procéder ainsi : on effectue des tirages répétés et on interprète les bits aléatoires ainsi produits comme l'écriture binaire d'un nombre réel x uniformément réparti entre 0 et 1 : on compare x à 1−p en binaire, c'est-à-dire qu'on s'arrête dès qu'on dispose d'assez de bits pour pouvoir décider si x < 1−p ou x > 1−p (on peut considérer le cas x = 1−p comme s'il était impossible vu qu'il est de probabilité 0), en notant qu'on va avoir x < 1−p lorsque le k-ième bit tiré est 0 et que le k-ième bit de l'écriture binaire de p vaut 0, et x > 1−p lorsque le k-ième bit tiré est 1 et que le k-ième bit de p vaut 1 ; et si x < 1−p on renvoie non, sinon oui. Concrètement, donc, faire des tirages aléatoires jusqu'à ce que le k-ième bit tiré soit égal au k-ième bit de l'écriture de p, et alors s'arrêter et renvoyer ce bit-là. Il est clair que cet algorithme fonctionne, mais pour qu'il soit encore plus évident qu'il conduit à faire deux tirages en moyenne, on peut le reformuler de la façon encore plus élégante suivante (il suffit d'échanger les résultats 0 et 1 pour x, qui sont complètement symétriques, lorsque le bit correspondant de p vaut 0) : tirer des bits aléatoires jusqu'à tomber sur 1, et lorsque c'est le cas, s'arrêter et renvoyer le k-ième bit de p (où k est le nombre de bits aléatoires qui ont été tirés). Je trouve ça incroyablement élégant et astucieux (même si c'est très facile), et je ne sais pas d'où sort ce truc. (Cela revient encore à tirer une variable aléatoire k distribuée selon une loi géométrique d'espérance 1, comme je l'explique plus bas, c'est-à-dire valant k avec probabilité (½)k+1, et renvoyer le (k+1)-ième bit bk+1 de p, ce qui, quand on écrit p = ∑k=0+∞ bk+1·(½)k+1, est finalement assez évident.)

Comment tirer un entier aléatoire entre 0 et n−1 à partir de bits aléatoires ? (Ma première réaction en entendant ce problème a été de dire : considérer x uniforme dont l'écriture binaire est donnée par la suite des bits tirés, générer suffisamment de bits pour calculer la valeur de ⌊n·x⌋, où ⌊—⌋ désigne la partie entière, et renvoyer celle-ci. Ceci fonctionne, mais ce n'est pas le plus efficace. Un autre algorithme avec rejet consiste à générer r := ⌈log(n)/log(2)⌉ bits, qui, lus en binaire, donnent un entier aléatoire c entre 0 et 2r−1, renvoyer c s'il est <n, et sinon tout recommencer. Mais ce n'est pas très efficace non plus, quoique dans des cas un peu différents.) Je décris ce problème plus en détails dans ce fil Twitter, mais donnons juste l'algorithme : on utilise deux variables internes à l'algorithme, notées v et c, qu'on initialise par v←1 et c←0 (il s'agit d'un réservoir d'entropie, et la garantie est que c est aléatoire uniformément réparti entre 0 et v−1) ; puis on effectue une boucle : à chaque étape, on génère un bit aléatoire b (valant 0 ou 1 avec probabilité ½ pour chacun, et indépendant de tous les autres, donc) et on remplace v ← 2v et c ← 2c+b ; puis on compare v avec n et c avec n : si v<n (ce qui implique forcément c<n) on continue simplement la boucle (il n'y a pas assez d'entropie) ; si vn et c<n, on termine l'algorithme en renvoyant la valeur c ; enfin, si cn, on effectue v ← vn et c ← cn et on continue la boucle. Le calcul du nombre moyen de tirages effectués est fastidieux (voir cette référence citée dans le fil Twitter référencée ci-dessus), mais c'est optimal.

L'algorithme que je viens de décrire s'adapte assez bien pour tirer un entier uniforme entre 0 et n−1 à partir d'une source de entiers uniformes entre 0 et m−1 (le cas que je viens de décrire est le cas m=2), autrement dit : comment fabriquer un dé à n faces à partir d'un dé à m faces ? Je n'ai pas vraiment envie de réfléchir à si c'est optimal (mise à jour : on l'a fait pour moi), mais c'est en tout cas assez élégant : on utilise deux variables internes à l'algorithme, notées v et c, qu'on initialise par v←1 et c←0 ; puis on effectue une boucle : à chaque étape, on génère un tirage aléatoire b entre 0 et m−1 à partir de la source dont on dispose et on remplace v ← m·v et c ← m·c+b ; puis on effectue la division euclidienne de v et de c par n : si les deux quotients calculés sont différents (⌊c/n⌋ < ⌊v/n⌋), on termine l'algorithme en renvoyant le reste c%n := cn·⌊c/n⌋ de la division de c par n, tandis que si les deux quotients sont égaux, on remplace chacun par son reste, c'est-à-dire v ← v%n et c ← c%n et on continue la boucle.

Introduisons maintenant aussi des tirages continus.

↑Entry #2686 [older| permalink|newer] / ↑Entrée #2686 [précédente| permalien|suivante] ↑

↓Entry #2685 [older| permalink|newer] / ↓Entrée #2685 [précédente| permalien|suivante] ↓

(vendredi)

Configurations de points et droites : un petit projet mathématico-physico-artistique

Je parle souvent de maths un peu compliquées sur ce blog, alors pour changer (et pour me changer les idées) je vais parler de choses un peu plus simples : de géométrie plane, et plus précisément de points et de droites. Je voudrais évoquer un petit projet que j'ai — qui, comme beaucoup de projets que j'ai, risque de n'aboutir nulle part — et qui ferait intervenir les maths (pour le sujet de fond), la mécanique classique (pour l'animation), l'informatique (pour le calcul) et un côté artistique (parce que le but serait surtout de faire quelque chose de joli à regarder). Enfin, ça c'était l'idée initiale, sauf que, comme d'habitude quand j'écris une entrée dans ce blog (mais bon, c'est un peu l'idée, aussi), je suis tombé dans un terrier de lapin, je me suis perdu dans les méandres de ce que je dois raconter, et au final ça ne ressemble à rien.

La configuration (9₃)① (ou configuration de Pappus) La configuration (9₃)② La configuration (9₃)③

J'ai expliqué par le passé (et souvent fait référence depuis au fait) que j'étais fasciné par la symétrie et par les objets mathématiques très symétriques. En même temps, il ne faut pas oublier que je suis géomètre, et au sein de la géométrie, j'aime beaucoup ce qui en est la forme la plus épurée, la géométrie projective (plane, disons) où il n'est question que de points et de droites. (Je faisais d'ailleurs souvent remarquer à mes élèves agrégatifs quand ils faisaient des développements sur les constructions à la règle et au compas qu'il pouvait être bienvenu de consacrer une certaine attention aux constructions à la règle seule, qui sont les constructions « pures » de la géométrie projective, où on ne peut que relier deux points à la règle et intersecter deux droites.)

À la croisée de ces deux intérêts, il y a la notion de configuration de points et de droites (dans le plan) : une configuration est simplement un ensemble fini de points et un ensemble fini de droites[#]. Les figures ci-contre à droite sont des exemples de configurations de neuf points et neuf droites telles que par chaque point de la configuration passent exactement trois droites et chaque droite passe par exactement trois points. Bien sûr, on peut voir sur cette figure d'autres points, à l'intersection de deux droites de la configuration, mais ceux qui sont des points de la configuration sont uniquement ceux que j'ai marqués en rouge, pas n'importe quel point que vous pouvez voir comme intersection de deux droites (et symétriquement, on peut considérer d'autres droites en reliant deux des points, mais ceux qui sont des droites de la configuration sont celles qui ont été tracées, pas n'importe quelle droite que vous pouvez faire apparaître en reliant deux points).

[#] Pour éviter de considérer des objets sans intérêt, on demandera que chaque point de la configuration soit situé sur au moins une des droites de la configuration (sinon c'est un point isolé qui ne sert à rien), voire deux (sinon c'est un point isolé sur sa droite), voire trois (sinon c'est juste le marqueur d'une intersection), et symétriquement, que chaque droite passe par au moins un des points, voire deux, voire trois. De toute façon, comme je le dis plus bas, on demande en général que la configuration soit régulière, c'est-à-dire que par chaque point passe le même nombre q de droites et que chaque droite passe par le même nombre k de points.

Je ne veux pas parler longuement des configurations de points et de droites, parce que ce n'est pas tellement mon sujet, mais disons-en quand même quelques mots. (Enfin, quelques mots qui, comme d'habitude, se sont multipliés en quelques pages.) Ceux qui veulent juste savoir ce qu'est mon projet peuvent sauter directement plus bas.

Généralement on s'intéresse aux configurations possédant un certain degré de régularité, au moins numérique, c'est-à-dire que par chaque point passe le même nombre de droites et chaque droite passe par le même nombre de points (voire que ces deux nombres sont égaux, ce qui est le cas sur mes exemples), voire un certain degré de symétrie. Spécifiquement, on dit qu'une configuration est de type (pq,nk), où p,q,n,k sont quatre entiers ≥2 (ou en fait plutôt ≥3), lorsqu'elle comporte p points et n droites, que par chaque point passent q droites et que chaque droite passe par k points (ces informations sont donc redondantes et on a pq = nk, ce qui se voit en comptant le nombre total d'incidences d'un point et d'une droite) ; la plupart des textes sur les configurations de points et droites utilisent le mot configuration pour désigner spécifiquement les configurations régulières, c'est-à-dire celles qui sont de type (pq,nk) pour certains paramètres p,q,n,k≥3. Lorsque de plus p=n (ou ce qui revient au même, q=k), on dit simplement qu'on a affaire à une configuration de type (nk), c'est-à-dire n points, n droites, chaque droite passant par k points et par chaque point passant k droites : mes figures à droite sont donc des configurations de type (9₃).

Pour être plus précis, je dois distinguer la notion de configuration abstraite et de réalisation géométrique de la configuration : deux configurations géométriques ont la même configuration abstraite lorsqu'on peut étiqueter (i.e., donner des noms, ce que je n'ai volontairement pas fait sur les figures ci-contre) aux points et aux droites des deux configurations de manière à ce qu'elles se correspondent avec les mêmes incidences, c'est-à-dire que si la droite nommée passe par le point nommé P sur une figure, ça doit aussi être le cas sur l'autre. (Cela pourrait être le cas parce qu'on a déplacé juste un petit peu les points et les droites d'une des figures pour former l'autre, mais ce n'est pas forcément le cas qu'on puisse passer continûment de l'une à l'autre.) Une configuration abstraite est donc la manière de demander quelles droites doivent passer par quels points (par exemple, un triangle abstrait consisterait à dire trois points A,B,C et trois droites a,b,c de manière que a passe par B et C, que b passe par C et A et que c passe par A et B ; et une réalisation géométrique de cette configuration abstraite est simplement un triangle).

Bref, une configuration abstraite est simplement la donnée de deux ensembles finis d'objets, arbitrairement appelés points et droites, et d'une relation d'incidence entre points et droites (on peut dire qu'une droite [abstraite] passe par un point [abstrait] lorsque cette relation est satisfaite) ; si on veut, c'est un graphe bipartite ; et on demandera en outre qu'il existe au plus une droite incidente avec deux points distincts donnés et au plus un point incident avec deux droites distinctes données (ceci correspond au fait que, dans le plan, deux points distincts définissent une droite et que deux droites distinctes se coupent en au plus un point). Une réalisation géométrique d'une configuration abstraite est une façon de trouver des points distincts et des droites distincts dans le plan (encore qu'il faut préciser quel plan : plan euclidien, ou ce qui revient au même, affine réel, plan projectif réel, ou des plans affines ou projectifs différents), en correspondance avec la configuration abstraite à réaliser, de façon qu'une droite passe par un point exactement quand l'incidence a lieu dans la configuration abstraite.

Il y a donc plusieurs questions qui se posent naturellement : quelles sont les configurations abstraites possibles ? (peut-on, par exemple, les dénombrer ? les classifier ? a priori non, cela reviendrait en gros à classifier les graphes bipartites, ce qui n'a guère de sens, il y a juste trop de possibilités, mais on peut s'intéresser à celles qui vérifient certaines contraintes, par exemple ont beaucoup de symétries ; ou on peut simplement en chercher qui sont particulièrement remarquables et intéressantes, et je vais donner quelques exemples ci-dessous) ; parmi elles, quelles sont celles qui sont réalisables ? (peut-on tester ce fait efficacement sur tel ou tel corps ? je dois mentionner que cela revient en fait à tester si un système d'équations polynomiales tout à fait général a des solutions, ce qui est décidable mais très coûteux sur les complexes, décidable mais extraordinairement coûteux sur les réels, et possiblement indécidable sur les rationnels) ; puis on peut encore se poser des questions sur les réalisations d'une configuration donnée, par exemple peut-on passer continûment de l'une à l'autre ? Malheureusement, je doute qu'on puisse dire quoi que ce soit de vraiment intelligent sur aucune de ces questions à ce niveau de généralité (il faut se contenter de résultats du type : pour tout n≥9, il existe au moins une configuration géométrique de type (n₃) dans le plan euclidien).

Quelle est cette configuration ?

Il n'est pas toujours évident, visuellement, de reconnaître quand une configuration abstraite est la même qu'une autre. Par exemple, les trois configurations (9₃) ci-dessus à droite sont distinctes non seulement géométriquement (c'est évident) mais même abstraitement ; et celle qui est ci-contre à gauche, est une réalisation géométrique (différente) d'une des trois configurations abstraites en question, et ce n'est pas forcément immédiat de reconnaître laquelle ! Le lecteur saura-t-il reconnaître laquelle, et saura-t-il montrer que les trois de départ sont bien distinctes ? Pour ça, on peut suggérer l'indication consistant à relier (d'une couleur différente, disons) les paires de points qui ne sont pas situées sur une même droite de la configuration, et regarder le graphe ainsi formé (par exemple, y a-t-il des triplets de points dont aucune paire n'est située sur une droite de la figure ? combien de tels « anti-triangles » y a-t-il ?).

Plus difficile, on peut chercher à montrer qu'il n'y a que trois configurations (9₃) abstraites possibles, et que je les ai donc toutes les trois réalisées géométriquement. (La plus en haut, (9₃)①, s'appelle la configuration de Pappus, parce qu'elle est celle qui intervient dans l'énoncé du théorème de Pappus.) Il y a une unique configuration (8₃) abstraite possible, la configuration de Möbius-Kantor, mais elle n'est pas réalisable géométriquement dans le plan réel même si elle l'est sur les complexes (on peut par exemple l'obtenir en retirant un point et les droites qui vont avec à une autre, de type (9₄,12₃) celle-là, la configuration de Hesse, elle aussi non réalisable sur les réels mais réalisable sur les complexes, qui est celle des neuf points d'inflection d'une courbe cubique lisse). Il y a aussi une unique configuration (7₃) abstraite possible, la configuration de Fano, mais celle-ci n'est réalisable que sur un corps de caractéristique 2.

↑Entry #2685 [older| permalink|newer] / ↑Entrée #2685 [précédente| permalien|suivante] ↑

↓Entry #2683 [older| permalink|newer] / ↓Entrée #2683 [précédente| permalien|suivante] ↓

(samedi)

Sur le modèle SIR avec susceptibilité hétérogène

Je continue dans ce billet de blog une série sur l'épidémiologie mathématique que j'avais commencée avec cette entrée sur le modèle SIR classique, celle-ci sur une variante de SIR où le rétablissement se fait en temps constant, accessoirement celle-ci sur la différence entre seuil d'immunité collective et taux d'attaque, et plus indirectement celle-ci sur des modèles d'hétérogénéité basés sur les graphes aléatoires ; je ne présuppose pas la lecture des billets en question, même si celle du premier a un intérêt, mais je vais en résumer rapidement le contenu.

Mon but aujourd'hui est d'expliquer un peu en détails, mathématiquement, comment on peut modifier le modèle SIR classique (dont le vais rappeler les grandes lignes dans un instant), lequel décrit l'évolution d'une épidémie dans laquelle tout le monde est également susceptible à l'infection, pour le cas d'une susceptibilité hétérogène, c'est-à-dire que certains individus sont plus ou moins susceptibles d'être infectés (= ont plus ou moins de chances d'être infectés dans des circonstances identiques), et on va voir que ces hétérogénéités de susceptibilité ont un impact important. (Je ne me prononce pas sur la cause de ces différences de susceptibilité : elles pourraient être dues à des différences biologiques — certaines personnes s'infectent plus facilement que d'autres — ou sociales — certaines personnes sont plus fréquemment exposées à des conditions infectieuses. Néanmoins, comme le modèle que je vais développer ici suppose que la variation de susceptibilité n'est pas corrélée à une variation d'infectiosité, c'est-à-dire que les personnes plus susceptibles ne sont pas spécialement plus infectieuses — si c'était le cas l'effet que je décris ici serait encore plus accentué — il vaut peut-être mieux imaginer le cas d'une origine biologique, parce qu'une hétérogénéité sociale a plus de chances d'être symétrique.)

Ce qui est assez surprenant, c'est que cette idée, qui peut paraître compliquée à traiter, complique en fait extrêmement peu le modèle SIR, et qu'on peut trouver des réponses exactes à essentiellement les mêmes questions que pour SIR classique (du genre quel est le nombre maximal d'infectés ?) dans ce cadre plus complexe, donnée la distribution (initiale) de susceptibilité dans la population. En général les réponses feront intervenir la transformée de Laplace de la distribution de susceptibilité (je vais expliquer ce que c'est plus bas), mais dans un cas particulier assez naturel (celui d'une distribution Γ, par exemple la distribution exponentielle), on peut tout traiter complètement.

[Un résumé de ce post de blog est contenu dans ce fil Twitter (17 tweets ; ici sur ThreadReaderApp), pour ceux qui préfèrent ce format ou qui veulent surtout les points importants (noter que tweet 11/17 il y a une typo, il faut lire φ′(0)=−1 et pas φ′(0)=1). ※ Une version anglaise (un petit peu plus longue) est contenu dans ce fil Twitter (25 tweets ; ici sur ThreadReaderApp).]

Ajout () : Comme je commence à avoir écrit pas mal de choses au sujet d'épidémiologie sur Twitter, voici un méta-fil (ici sur ThreadReaderApp) rassemblant les plus importants fils que j'ai pondus.

Je commence par rappeler les grandes lignes du modèle SIR classique.

Le modèle SIR classique, donc, étudie l'évolution d'une épidémie dans une population en distinguant trois classes d'individus : les Susceptibles, les Infectieux (qui dans ce modèle sont les mêmes que les infectés) et les Rétablis (qui sont immuns — ou, en fait, morts). Parmi les nombreuses hypothèses simplificatrices faites par ce modèle, il y a les suivantes (j'en oublie certainement) : l'immunité acquise par l'infection est parfaite et permanente, les individus sont infectieux dès qu'ils sont infectés, et ils vont donc soit rester dans l'état S, soit passer succesivement par les étapes S,I,R ; la population est homogène, c'est-à-dire que tous les individus sont également susceptibles et également infectieux une fois infectés, ils ont les mêmes probabilités de se faire infecter, la taille de la population est constante, et elle est assez grande pour être traitée de façon continue déterministe, et les contacts obéissent à une hypothèse de mélange parfait (au sens où tous les contacts sont également plausibles) ; le comportement de la population est constant dans le temps et notamment indépendant de l'évolution de l'épidémie ; les contaminations et le rétablissement obéissent à une cinétique du premier ordre I+S → I+I et I → R respectivement, avec des constantes β (d'infectiosité) et γ (de rétablissement) respectivement, c'est-à-dire le nombre de nouveau infectés par unité de temps est simplement proportionnel au produit du nombre d'infectieux par le nombre de susceptibles, et que le nombre de nouvellement rétablis est simplement proportionnel au nombre d'infectieux.

Bref, si on note s,i,r (quantités réelles entre 0 et 1, fonctions du temps) les proportions de la population formées d'individus susceptibles, infectieux et rétablis respectivement, alors les nouvelles infections par unités de temps se représentent par le terme β·i·s, et les rétablissements par γ·i, du coup le modèle SIR est décrit par le système d'équations différentielles ordinaires (autonomes) du premier ordre suivant :

  • ds/dt = −β·i·s
  • di/dt = β·i·sγ·i
  • dr/dt = γ·i
  • (s+i+r=1)

où on impose en outre généralement les conditions initiales telles que s(−∞)=1, i(−∞)=0 et r(−∞)=0 (je parle bien sûr des limites en −∞), avec i croissant exponentiellement pour t assez proche de −∞ (cf. ci-dessous). La constante β d'infectiosité représente le nombre moyen de personnes qu'une personne infectieuse donnée infecte par unité de temps dans une population entièrement susceptible, tandis que la constante γ de rétablissement représente la proportion moyenne d'infectés qui se rétablissent par unité de temps (donc l'inverse du temps moyen de rétablissement, le temps de rétablissement suivant en fait une loi exponentielle). Notons que β peut aussi, symétriquement, se comprendre comme une constante de susceptibilité, c'est-à-dire comme le nombre moyen de personnes par lesquelles une personne susceptible donnée sera infectée par unité de temps dans une population entièrement infectieuse : c'est la raison pour laquelle je parlerai tantôt de β comme représentant une infectiosité et tantôt une susceptibilité (et comme ici on veut modéliser des variations de susceptibilité, c'est plutôt le deuxième qui va être mis en lumière).

Rappelons quelques uns des points saillants de ce modèle concernant le début, le pic et la fin de l'épidémie, résumé que je recopie de ce billet (plus exactement, comme je viens de le dire, on s'intéresse aux solutions pour lesquelles s→1 quand t→−∞) ; on notera κ := β/γ le nombre de reproduction, que je suppose >1 :

  • tant que s reste très proche de 1 (si on veut, t→−∞), les proportions i et r croissent comme des exponentielles de pente logarithmique βγ = β·((κ−1)/κ), avec un rapport 1/(κ−1) entre les deux, autrement dit comme i = c·exp((βγt) = c·exp(β·((κ−1)/κt) et r = c·(γ/(βγ))·exp((βγt) = c·(1/(κ−1))·exp(β·((κ−1)/κt) (ergotage : dans l'entrée sur le sujet, j'avais mis un −1 aux exponentielles pour r, parce que je voulais partir de r=0, mais je me rends compte maintenant qu'il est plus logique de partir d'une solution où i/r tend vers une constante en −∞, cette constante étant κ−1) ;
  • au moment du pic épidémique (maximum de la proportion i d'infectieux), on a s = 1/κ et i = (κ−log(κ)−1)/κ et r = log(κ)/κ ; notamment, le moment où l'épidémie commence à régresser correspond à i+r = 1 − 1/κ (seuil d'immunité collective) ;
  • quand t→+∞, la proportion i tend vers 0 (bien sûr) et s tend vers Γ := −W(−κ·exp(−κ))/κ (en notant W la fonction de Lambert) l'unique solution strictement comprise entre 0 et 1 de l'équation Γ = exp(−κ·(1−Γ)) (qui vaut 1 − 2·(κ−1) + O((κ−1)²) pour κ proche de 1, et exp(−κ) + O(κ·exp(−2κ)) pour κ grand), tandis qu'évidemment r, lui, tend vers 1−Γ (taux d'attaque final).

J'ai parlé dans cette entrée de la différence entre seuil d'immunité collective et taux d'attaque final (qui sont les deux quantités essentielles que le modèle calcule) dans le modèle SIR.

*

↑Entry #2683 [older| permalink|newer] / ↑Entrée #2683 [précédente| permalien|suivante] ↑

↓Entry #2675 [older| permalink|newer] / ↓Entrée #2675 [précédente| permalien|suivante] ↓

(mercredi)

La réalisabilité de Kleene (comme prélude au topos effectif)

Interrompons un petit peu la succession de rants au sujet du covid pour parler un peu de maths. Je déterre pour le terminer un vieux texte que j'avais commencé il y a environ deux ans et que j'avais abandonné, mais auquel je repense parce que j'ai reréfléchi à des questions adjacentes. Le but est ici de définir un concept à cheval entre la logique et la calculabilité qui s'appelle la réalisabilité de Kleene. Plus tard (un jour, si j'en trouve le temps et la patience) j'aimerais parler du topos effectif, et comme le topos effectif contient (généralise, donne un cadre catégorique à) la réalisabilité de Kleene, il sera utile que j'aie au moins écrit à ce sujet avant, même si en principe on n'a pas besoin de passer par cette étape intermédiaire. [Ajout : le billet sur le topos effectif est ici.]

Tout ceci a un rapport avec la logique intuitionniste : j'ai déjà écrit un post de blog à ce sujet, qu'il peut être utile d'avoir lu, mais il faut admettre qu'il est extrêmement brouillon et mal structuré [ajout : celui-ci, écrit ultérieurement, est sans doute bien plus clair]. En tout état de cause, il n'est pas nécessaire de savoir ce que c'est que la logique intuitionniste pour comprendre la définition de la réalisabilité de Kleene. (Le principal prérequis à ce qui va suivre est de savoir les bases de la calculabilité : ce qu'est une machine de Turing — ou toute autre représentation des fonctions partielles calculables —, et savoir qu'on peut les encoder par des entiers naturels ; donc comprendre une expression comme le résultat de l'exécution de la machine de Turing codée par l'entier e sur l'entier n en entrée. c'est-à-dire l'image de n par la e-ième fonction calculable partielle, qui sera noté en ci-dessous.) Néanmoins, comme la réalisabilité de Kleene est compatible avec les règles de la logique intuitionniste (elle réalise tous les théorèmes de l'arithmétique de Heyting), et est inspirée par (et rend rigoureux) les principes (informels) de Brouwer-Heyting-Kolmogorov, c'est bien d'en avoir au moins une idée ; cette connexion avec la logique intuitionniste sera encore plus forte dans le topos effectif : on peut dire sommairement qu'un topos est une sorte de « monde mathématique alternatif » régis par les lois de la logique intuitionniste (et le topos effectif est un tel monde où la calculabilité joue un rôle central et notamment toutes les fonctions ℕ→ℕ sont calculables).

Mais le but de cette entrée-ci n'est pas de décrire le topos effectif (pas qu'il soit très long à définir, mais ça devient long si on veut en dire le minimum pour que ce soit intéressant). C'est de présenter une notion plus ancienne, la réalisabilité de Kleene, qui sert de fondement ou de prolégomène à la construction du topos effectif. Je dois avouer que le sens profond de cette notion m'échappe encore, et j'ai vaguement l'impression que personne ne la comprend aussi profondément qu'il voudrait ; je ne sais même pas bien ce que Kleene cherchait à faire en introduisant cette notion. Mais superficiellement, l'idée est qu'on définit une notion que je vais noter n ⊪ φ, lire n réalise φ, entre un entier naturel n et une formule logique φ de l'arithmétique du premier ordre (je vais rappeler ce que c'est plus bas), et dont le sens intuitif est que n apporte une sorte de témoignage(?) algorithmique de la véracité de φ (néanmoins, on va voir que φ n'est pas forcément vraie dans le monde classique, et il va s'agir d'expliquer le rapport entre ces notions).

Le rapport avec le topos effectif sera notamment que les énoncés arithmétique du premier ordre qui sont réalisables (au sens où il existe un n qui les réalise) seront exactement ceux qui seront vrais dans le topos effectif. En particulier, la réalisabilité permet de faire un pont vers la logique intuitionniste, même en partant de la logique classique : on n'a pas besoin de savoir ce qu'est la logique intuitionniste ni comment elle fonctionne pour définir la relation n ⊪ φ, mais une fois qu'on l'a définie, on constate qu'elle fonctionne de façon fondamentalement intuitionniste en φ (et notamment, réaliser la double négation ¬¬φ n'est pas du tout pareil que réaliser φ). Par ailleurs, la relation n ⊪ φ est elle-même une formule logique (avec une variable n de plus que la formule de départ), on peut se demander sous quelle condition elle-même est réalisable, ou démontrable (ou démontrablement réalisable), etc., et les réponses sont assez satisfaisantes.

Ajout : ce billet ultérieur, sur la réalisabilité propositionnelle (qu'on peut lire avant, ou après, ou indépendamment) a aussi un rapport étroit avec celui-ci, puisque la réalisabilité propositionnelle est la logique propositionnelle interne du topos effectif de même que la réalisabilité de Kleene dont il est question ici est l'arithmétique du premier ordre dans le topos effectif.

Avant de donner la définition, je dois rappeler des choses sur la logique, qu'on peut sans doute se contenter de lire en diagonale parce que ce qui suit est vraiment standard et peu surprenant.

D'abord, qu'est-ce que c'est qu'une formule de l'arithmétique du premier ordre ? Il s'agit d'une formule fabriquée à partir des connecteurs logiques et de quantificateurs qui ne peuvent porter que sur les entiers naturels. En voici une définition plus précise :

Pour commencer, un terme (de l'arithmétique du premier ordre) est une expression formée à partir d'un stock illimité de variables (que j'appellerai généralement k, , m, n, p, q, etc.) et des constantes représentant les entiers naturels (0, 1, 2, etc.) au moyen des opérations de somme (+), produit (×, souvent noté par simple concaténation) et, pour me simplifier la vie, d'élévation à la puissance (↑, souvent noté en plaçant le deuxième argument en exposant du premier) ; une formule atomique (de l'arithmétique du premier ordre) est celle exprimant l'égalité entre deux termes, par exemple m=2n ou pk+qk=nk sont des formules atomiques ; mettons qu'on accepte aussi comme atomiques les formules d'inégalité, comme ij, cela me simplifiera aussi la vie ; les variables libres d'une formule atomique sont toutes les variables qui y apparaissent (par exemple, dans m=2n, il y a deux variables libres, m et n). Une formule (de l'arithmétique du premier ordre) est définie inductivement de la façon suivante : (A) toute formule atomique est une formule, ainsi que les formules ⊤ (tautologiquement vraie, qu'on peut considérer comme synonyme de 0=0 si on préfère) et ⊥ (tautologiquement fausse, qu'on peut considérer comme synonyme de 0=1 si on préfère), (B) si φ et ψ sont deux formules, alors φψ (conjonction logique), φψ (disjonction logique) et φψ (implication logique) en sont, et leurs variables libres sont celles de φ et de ψ, ainsi que ¬φ (négation de φ, qu'on considérera comme une abréviation pour φ⇒⊥) qui a les mêmes variables libres que φ, et (C) si φ est une formule alors ∀n.φ et ∃n.φ sont des formules ayant les variables libres de φ sauf n (notons qu'elle avait parfaitement le droit de ne pas figurer dans φ, par exemple ∃n.(0=0) est une formule légitime — et d'ailleurs vraie). Il faudrait ajouter des parenthèses dans ce que je viens d'écrire pour éviter les ambiguïtés d'écriture, mais je vais supposer que mon lecteur saura le faire sans plus d'explication. Par ailleurs, il faudrait définir la substitution d'un terme pour une variable libre : si φ(n) désigne une formule ayant possiblement la variable libre n, et si t est un terme, alors φ(t) désigne la substitution de t pour la variable n (là où elle est libre, donc pas à l'intérieur d'éventuels quantificateurs ∀n ni ∃n).

Si t est un terme ne faisant pas intervenir la variable n, on utilise les notations ∀nt.φ et ∃nt.φ comme abréviations (sucre syntaxique) de ∀n.(nt ⇒ φ) et ∃n.(nt ∧ φ). Une formule dont tous les quantificateurs sont de cette forme est dite (arithmétique) à quantificateurs bornés ou (arithmétique) Δ₀. L'intérêt des formules à quantificateurs bornés est que leur véracité peut se tester de façon « finitaire » (si on veut, on a un algorithme qui, donnée une formule à quantificateur bornés, termine de façon certaine en temps fini en renvoyant vrai ou faux selon que la formule est vraie ou fausse).

Une formule n'ayant aucune variable libre est appelée un énoncé.

Ensuite, j'ai besoin de deux notions de codage classiques. Premièrement, on peut coder (=représenter) les couples d'entiers naturels par des entiers naturels : pour ça, je choisis une bijection ℕ²→ℕ calculable (et même primitive récursive, disons (p,q)↦2p(2q+1)−1 pour fixer les idées) dont je note ⟨p,q⟩ l'image du couple (p,q). Deuxièmement, j'ai aussi besoin de coder (=représenter) les machines de Turing (ou toute autre façon de représenter les fonctions calculables partielles ℕ⇢ℕ) par des entiers naturels. Il y a plusieurs notations vaguement standard pour désigner l'exécution de la e-ième machine de Turing (i.e., celle codée par l'entier naturel e) sur l'entier n, c'est-à-dire l'image de n par la e-ième fonction calculable partielle : on note ça parfois Φe(n) (voire φe(n), mais j'ai choisi la lettre ‘φ’ pour désigner des formules logiques donc je ne peux pas), parfois {e}(n), ce qui est une notation franchement pourrie ; une notation plus rare, mais moins problématique, et c'est celle que je vais utiliser, est en (cf. ci-dessous pour l'écriture formelle de cette expression dans l'arithmétique du premier ordre). J'écrirai en↓ pour signifier que en est défini, y compris dans des expressions comme en↓=v (de nouveau, cf. ci-dessous).

Bref, ⟨p,q⟩ désignera le couple (p,q) codé sous forme d'un entier naturel, et en désignera le résultat de l'exécution du programme codé par l'entier naturel e sur l'entier naturel n passé en entrée (et peut donc ne pas être définie si le programme en question n'est pas correct, ou si son exécution ne termine pas, ou si le résultat n'est pas un entier naturel correct).

L'opération en ne fait pas partie du langage de l'arithmétique, mais on peut l'y définir : c'est-à-dire que l'affirmation l'exécution du programme [codé par] e sur l'entrée n termine et renvoie la valeur v (qu'on peut abréger en↓=v) peut s'écrire comme une formule de l'arithmétique du premier ordre. Pour être même un chouïa plus précis, il existe une formule T(e,n,x), le prédicat T de Kleene, qu'on peut écrire explicitement mais je ne le ferai pas, et qui est même à quantificateurs bornés (Δ₀ : cf. ci-dessus), dont le sens intuitif est l'exécution du programme e sur l'entrée n termine avec pour trace d'exécution x (la trace d'exécution étant le détail de tous les calculs qu'a fait, par exemple, la machine de Turing désignée par e) ; et une fonction U(x) dont on peut supposer — et je le ferai — que c'est simplement la projection x=⟨t,v⟩ ↦ v sur la seconde coordonnée, qui transforme une trace d'exécution x en le résultat v renvoyé par le calcul. Ainsi, en↓ (l'exécution du programme e sur l'entrée n termine) s'écrit/signifie ∃x.T(e,n,x) ; et en↓=v (l'exécution du programme e sur l'entrée n termine et renvoie v) s'écrit/signifie ∃t.(T(e,n,⟨t,v⟩)).

★ Voici maintenant la définition de la réalisabilité de Kleene, par induction sur la complexité de la formule réalisée :

  • lorsque φ est une formule atomique (y compris ⊤ ou ⊥), n ⊪ φ signifie simplement φ (i.e., que φ est vraie) : autrement dit, n'importe quel entier naturel réalise une formule atomique vraie, et aucun entier naturel ne réalise une formule atomique fausse ;
  • on a n ⊪ (φψ) lorsque n=⟨p,q⟩ où p ⊪ φ et q ⊪ ψ : autrement dit, les entiers naturels qui réalisent une conjonction sont ceux qui codent un couple formé d'un réalisateur de chaque terme de la conjonction ;
  • on a n ⊪ (φψ) lorsque n=⟨0,p⟩ où p ⊪ φ ou bien n=⟨1,q⟩ où q ⊪ ψ : autrement dit, les entiers naturels qui réalisent une disjonction sont ceux qui codent un couple dont le premier membre indique quel terme de la disjonction est réalisé et le second le réalise ;
  • on a n ⊪ (φψ) lorsque, pour tout p tel que p ⊪ φ, on a (np↓) ⊪ ψ : autrement dit, les entiers naturels qui réalisent une implication sont ceux qui codent un programme (une fonction calculable (partielle)) qui, quand on lui fournit en entrée un entier p réalisant l'antécédent de l'implication, termine en temps fini et renvoie un entier réalisant la conclusion ;
  • en particulier (puisque ¬φ signifie φ⇒⊥ et qu'aucun entier ne réalise ⊥), on a n ⊪ ¬φ (pour n'importe quel n) lorsqu'il n'existe aucun entier p tel que p ⊪ φ ;
  • on a n ⊪ ∀x.φ(x) lorsque, pour tout k, on a (nk↓) ⊪ φ(k) (ou, pour être tout à fait précis, (nk↓) ⊪ φ(‘k’) où ‘k’ désigne la constante qui désigne l'entier naturel k, et φ(‘k’) la substitution de cette constante pour x dans la formule φ(x)) : autrement dit, les entiers naturels qui réalisent une quantification universelle sont ceux qui codent une fonction calculable (totale) qui, quand on lui fournit en entrée un entier k, renvoie un entier réalisant l'instance φ(k) en question de la formule universellement quantifiée ;
  • on a n ⊪ ∃x.φ(x) lorsque n=⟨k,p⟩ où pφ(k) (ou, pour être tout à fait précis, pφ(‘k’) comme dans le point précédent) : autrement dit, les entiers naturels qui réalisent une quantification existentielle sont ceux qui codent un couple dont le second membre un entier réalisant l'instance de la formule existentiellement quantifiée donnée par le premier membre.

Pour être tout à fait exact, je définis par les mêmes clauses énumérées ci-dessus deux variantes de la réalisabilité : il y a une notion dans l'univers mathématique, si j'ose dire, ambiant (n étant un entier naturel et φ une formule de l'arithmétique du premier ordre, n ⊪ φ a le sens défini par les clauses ci-dessus), et il y a une réalisabilité formalisée qui consiste à voir les clauses ci-dessus elles-mêmes dans l'arithmétique du premier ordre, c'est-à-dire qu'on va définir, par exemple, n ⊪ (φψ) comme la formule ∃n.(n=⟨p,q⟩ ∧ (pφ) ∧ (qψ)) et ainsi de suite. Il n'y a pas forcément besoin de distinguer ces deux notions, mais il est important de noter que la réalisabilité peut être formalisée, et donc que n ⊪ φ est elle-même une formule de l'arithmétique du premier ordre (pour n une variable libre n'apparaissant pas libre dans φ). (Ce n'est pas tellement différent de la formalisation de la notion de démonstration : l'affirmation φ est démontrable dans l'arithmétique de Peano, par exemple, est un énoncé arithmétique lorsque φ en est un : cf. ici pour plus d'explications.)

On lit n ⊪ φ en disant que n réalise φ ou que φ est réalisée par n, et n.(nφ) en disant que φ est réalisable.

↑Entry #2675 [older| permalink|newer] / ↑Entrée #2675 [précédente| permalien|suivante] ↑

↓Entry #2664 [older| permalink|newer] / ↓Entrée #2664 [précédente| permalien|suivante] ↓

(lundi)

Petite note technique sur la différence entre seuil d'immunité grégaire et taux d'attaque final

Je veux écrire ici une petite note sur un point que je pense avoir mal expliqué par le passé, et autour duquel il existe une certaine confusion. Il s'agit du rapport entre le seuil d'immunité grégaire d'une part et le taux d'attaque final d'une épidémie d'autre part : quelle est la différence entre ces deux concepts, que penser de l'écart, ou overshoot entre ces deux quantités, et laquelle est la plus pertinente en pratique. Il faudra bien distinguer le cas du modèle théorique SIR et le cas d'une épidémie réelle (et pour faire la transition de l'un à l'autre, j'évoquerai rapidement un modèle SIR « en deux phases »).

Le seuil d'immunité grégaire (ou …collective, peut-être un meilleur terme parce qu'il évoque moins l'image déplaisante d'un troupeau, mais comme j'ai commencé avec grégaire je préfère maintenant rester dessus) est la proportion d'immuns qu'il faut atteindre dans la population pour que le nombre de reproduction effectif de l'épidémie devienne <1. Autrement dit :

  • soit on considère une épidémie naissante, c'est-à-dire qu'il n'y a que très peu d'infectés, mais pour laquelle un certain nombre d'individus sont préalablement immunisés (par exemple par un vaccin) : alors le seuil d'immunité grégaire est le nombre d'immunisés nécessaires pour que l'épidémie ne démarre pas (son nombre de reproduction est <1 donc le petit nombre d'infectés disparaît simplement) ;
  • soit on considère une épidémie déjà en cours, et dans ce cas le fait qu'on atteigne le seuil d'immunité grégaire se voit au fait que le nombre d'infectés commence à décroître, c'est-à-dire qu'il y en a de moins en moins (le nombre de reproduction est <1 donc ce nombre diminue progressivement).

Par contraste, le taux d'attaque final (qui n'a de sens qu'en considérant le cours d'une épidémie particulière) est la proportion d'individus qui seront atteints par l'épidémie pendant toute sa durée.

Même si on suppose que l'immunité est parfaitement stérilisante et dure indéfiniment (ce que je ferai pour simplifier, ce n'est pas le propos ici de discuter de ces questions), ces deux quantités sont différentes : la raison est simple, c'est que même une fois que le seuil d'immunité grégaire est atteint, le nombre d'infectés commence certes à diminuer, mais il n'est pas nul pour autant, donc il y a de l'inertie : ce nombre d'infectés en infecte un plus petit nombre, qui en infecte à son tour un encore plus petit nombre, et ainsi de suite, mais la somme de tout ça n'est pas nulle.

La différence entre ces deux quantités s'appelle l'overshoot de l'épidémie : i.e., l'overshoot est la proportion qu'elle attaque en plus du seuil d'immunité grégaire.

[Graphes des courbes de taux d'attaque et de seuil d'immunité grégaire]Dans le cas du modèle théorique (ultra-simpliste) SIR, on peut calculer explicitement ces deux quantités. Je l'ai fait dans l'entrée que j'ai écrite à ce sujet, mais je n'ai pas été clair parce que je n'avais pas la bonne terminologie (j'ai parlé de modèle extrêmement simpliste pour une description qui calcule, en fait, le seuil d'immunité grégaire, ce qui a pu augmenter la confusion), je redis donc les choses un peu autrement : en notant κ le nombre basique de reproduction (lettre que je préfère à R parce que le R de SIR a un sens différent), c'est-à-dire le nombre de reproduction pour une population immunologiquement (et sociologiquement) naïve :

  • le seuil d'immunité grégaire rherd dans le modèle SIR se calcule à partir du nombre basique de reproduction κ par la formule rherd = 1 − 1/κ (la démonstration est facile : lorsqu'une proportion s des individus est susceptible, le nombre de reproduction effectif tombe de κ à κ·s simplement parce que chaque contact possiblement infectieux a cette probabilité de donner effectivement une infection, du coup pour avoir κ·s = 1 on doit avoir s = 1/κ et cela correspond à la proportion complémentaire r = 1 − 1/κ d'immuns au final) ;
  • le taux d'attaque final r dans le modèle SIR se calcule à partir du nombre basique de reproduction κ par la formule r = 1 + W(−κ·exp(−κ))/κ où W désigne la fonction transcendante W de Lambert (j'ai déjà démontré cette formule dans mon entrée passée sur le sujet).

J'ai tracé ces deux courbes ci-contre en fonction du nombre de reproduction κ : en rouge le seuil d'immunité grégaire, et en bleu le taux d'attaque final. Rappelons en outre, pour ce qui est du comportement asymptotique que [encore une fois, tout ça je l'ai déjà dit, mais avec une terminologie qui n'était pas claire] :

  • si le nombre basique de reproduction κ est juste un peu au-delà de 1, disons 1 + h avec h>0 petit, alors le seuil d'immunité grégaire rherd vaut hh² + O(h³) tandis que le taux d'attaque final r vaut 2·h − (8/3)·h² + O(h³), donc en gros le double (ce qui se conçoit grosso modo par le fait que les deux périodes de l'épidémie sont alors symétriques, celle où elle est croissante jusqu'au seuil d'immunité grégaire, et celle d'overshoot où elle est décroissante jusqu'à tendre vers son taux d'attaque final),
  • si le nombre basique de reproduction κ est grand, alors le seuil d'immunité grégaire rherd vaut 1 − 1/κ (il n'y a rien à simplifier) tandis que le taux d'attaque final r vaut 1 − exp(−κ) − κ·exp(−2κ) + O(κ²·exp(−3κ)), qui devient vite extrêmement proche de 1.

↑Entry #2664 [older| permalink|newer] / ↑Entrée #2664 [précédente| permalien|suivante] ↑

↓Entry #2656 [older| permalink|newer] / ↓Entrée #2656 [précédente| permalien|suivante] ↓

(samedi)

Quelques sujets mathématiques en vrac sous forme de MIGHTDO

Pendant que j'étais occupé à ne pas écrire dans ce blog, les sujets sur lesquels j'aurais pu écrire quelque chose se sont accumulés. Je veux dire, les sujets sur lesquels soit j'ai appris quelque chose et j'aurais pu/dû le braindumper ici pour me simplifier la vie quand j'aurais plus tard oublié et voulu réapprendre, soit je me suis simplement dit que c'était quelque chose de potentiellement intéressant dans quoi je devrais me plonger si j'avais le temps. Bref, voici une liste de quelques choses sur lesquels je n'ai rien écrit, et il n'est pas impossible que j'y revienne, mais il ne faut pas compter dessus non plus. Pas un TODO, mais un MIGHTDO, si on veut.

(Les différentes parties qui suivent n'ont généralement aucun rapport entre elles. C'est bien le problème, si j'ose dire, de trop aimer l'éclectisme. Par ailleurs, elles mélangent des sujets où j'ai quelques trucs à expliquer (mais je ne le fais pas vraiment ici) et d'autres où j'ai simplement des questions à poser, ou encore où je n'ai rien à dire mais que j'utilise simplement comme memento pour me rappeler que c'est quelque chose d'intéressant à visiter ou revisiter un jour. Les explications, ou les absences d'explications, qui suivent, se placent aussi à des niveaux très variés de prérequis mathématiques.)

Liens vers les sous-parties de cette entrée : • Mandelbrot • inégalités de Bell • topologie sans points • axiome de Scott • topos effectif • complexité au-delà du calculable • algèbres de Jordan • problème du secrétaire • mécanique sphérique • surface de Bring • Cayley-Bacharach • le spectre des polynômes à valeurs entières

↑Entry #2656 [older| permalink|newer] / ↑Entrée #2656 [précédente| permalien|suivante] ↑

↓Entry #2654 [older| permalink|newer] / ↓Entrée #2654 [précédente| permalien|suivante] ↓

(samedi)

Quelques considérations de graphes aléatoires pour l'épidémiologie

Même si mon moral est moins mauvais, je continue à avoir beaucoup de mal à faire autre chose que de l'épidémiologie. Du coup, je vais en parler encore une fois, pour présenter une approche différente du calcul du taux d'attaque, qui permet cette fois-ci d'illustrer (par des considérations théoriques plutôt que des simulations numériques) certains effets d'hétérogénéité. (Il s'agit d'une traduction+développement de ce que j'ai écrit dans ce fil Twitter [lien direct Twitter] ainsi que celui-ci [lien direct Twitter], et secondairement, de ce fil [lien direct Twitter] plus ancien.) Mais je commence par quelques remarques d'ordre méta sur ces effets d'hétérogénéité et les épidémiologistes de fauteuil (si ça ne vous intéresse pas, sautez après).

On (un des auteurs !) a enfin fini par me pointer du doigt un livre (et donc une référence citable !) où étaient traitées les probématiques épidémiologiques qui me préoccupaient : il s'agit de Mathematics of Epidemics on Networks (From Exact to Approximate Models) d'István Z. Kiss, Joel C. Miller et Péter L. Simon (Springer 2017). Non seulement il traite exactement tout ce que je voulais voir traité, mais la présentation est vraiment très agréable pour le mathématicien que je suis : les énoncés sont précis, les approximations sont expliquées avec soin, les notations ne sont pas trop pénibles, bref, je le recommande très vivement. (Quel dommage que toutes les bibliothèques soient fermées… Si seulement il y avait un site web — qui pourrait par exemple porter le nom en anglais d'une bibliothèque et du premier livre de la Bible — où on pourrait trouver les PDF de ce genre de choses. Ah non, zut, ce serait illégal, parce qu'on a des lois à la con qui empêchent la diffusion des connaissances. Mais pardon, je digresse.)

Il y aurait peut-être à analyser la raison pour laquelle j'ai réussi à passer à côté de cet excellent ouvrage jusqu'à tout récemment. (Il est possible qu'on me l'ait déjà suggéré et que je sois quand même passé à côté de la suggestion, parce que le mot networks ne m'inspirait pas : en fait, il s'agit de graphes, il y a apparemment des gens qui, parce qu'ils ont une approche un peu différente, parlent de réseaux pour parler de graphes, et notamment de graphes aléatoires, ce qui est leur droit mais ça ne facilite pas la communication. J'aimerais quand même bien comprendre, par exemple, pourquoi si on recherche Galton-Watson "attack rate" dans Google, les deux premières réponses sont de moi, alors que ça a quand même l'air d'être des termes très naturels à rechercher dans le contexte de la propagation des épidémies, et d'ailleurs le livre que je viens de mentionner devrait être dans les résultats, et beaucoup plus haut qu'un tweet à moi.) Mais je ne vais pas m'étendre là-dessus, en tout cas pas maintenant.

Bref, toujours est-il que j'ai été soulagé de voir que tout un tas de phénomènes que je voulais voir étudiés, et que j'avais au moins en partie redécouverts, comme ce que je vais décrire ci-dessous, étaient effectivement étudiés quelque part, et que j'aurai des références citables à montrer. J'ai l'habitude de redécouvrir des résultats connus, je dirais même que ça fait partie du fonctionnement normal de la science, et quand je l'apprends je suis plutôt content que mon intuition ne soit pas complètement à côté de la plaque.

En revanche, je demeure perplexe quant au fait que ces phénomènes soient bien connus ou non des épidémiologistes. Il y a deux prépublications qui sont sorties récemment, une sur l'arXiv (par des matheux) et une autre sur medRxiv (par des épidémiologistes plus médecins, ça se voit au fait qu'ils déposent sur medRxiv et n'utilisent pas TeX ☺️), qui font tous les deux la même observation, évidemment formulée et argumentée de façon plus précise, que j'écrivais dans cette entrée de blog ou de façon concise dans ce tweet (en mars) : l'épidémie va atteindre, et donc immuniser, les personnes les plus connectées en premier, ce qui fait que l'hétérogénéité des contacts contribue à réduire le seuil d'immunité à partir duquel elle se met à régresser (le premier de ces documents calcule 43%, ce qu'il ne faut pas, à mon avis, prendre comme une prédiction mais comme un ordre de grandeur grossier de l'effet qu'on peut attendre). D'un côté, il semble que ce type d'effet ait été étudié depuis 1980 (au plus tard). Mais de l'autre, un épidémiologiste renommé (Marc Lipsitch) semble considérer que c'est intéressant et vaguement nouveau, et il y en a qui n'ont pas reçu le message (et ce n'est qu'un exemple parmi d'autres où j'ai vu affirmer, y compris de la part de personnes qui sont des épidémiologistes ou qui ont une formation proche, que puisque R₀~3 on doit atteindre ~70% d'immunisés pour que l'épidémie régresse). Donc il y a, au minimum, un problème de communication. Ce n'est pas très grave, maintenant j'ai au moins quelque chose d'un peu plus crédible (un PDF !) à citer pour contester cette idée (et le fait que Marc Lipsitch prenne ça au sérieux est bien puisque c'est lui qui est à l'origine, d'avoir popularisé le chiffre de 70% comme taux d'attaque, même s'il l'a immédiatement nuancé). Mais ça reste un peu pénible d'avoir l'impression d'être le crackpot qui vient contredire les experts qui ont dit que c'était 70%. (Un peu quand comme l'OMS a fait une communication un peu hâtive en affirmant qu'il n'y avait aucun signe que l'infection par le Covid-19 confère une quelconque forme d'immunité, alors que quand même, si, il y a des raisons de le penser : ce n'est vraiment pas une position confortable que de tenir le discours je ne suis pas du tout médecin, mais je vais quand même remettre l'OMS à sa place sur une question de médecine. Bon, je digresse encore.)

PS : D'ailleurs, on me souffle que j'ai peut-être contribué à diffuser ces idées. Tant mieux si c'est le cas.

[Taux d'attaque d'une épidémie avec R₀=2.5 en fonction de l'écart-type du nombre de contacts]J'en viens à ce dont je voulais vraiment parler : un modèle basé sur la percolation dans des graphes aléatoires et permettant de modéliser (de façon simpliste !) la manière dont la variance du nombre de contacts infectieux modifie le taux d'attaque d'une épidémie à nombre de reproduction R₀ donné. C'est ce que représentent les courbes ci-contre, en l'occurrence pour R₀=2.5 (contacts infectieux par individu en moyenne), avec l'écart-type σ du nombre de contacts infectieux en abscisse, et en ordonnée le taux d'attaque prédit (en bleu par un modèle basé sur un graphe orienté, en rouge par un modèle symétrique) : je veux expliquer un peu comment lire ces courbes et comment elles ont été calculées.

↑Entry #2654 [older| permalink|newer] / ↑Entrée #2654 [précédente| permalien|suivante] ↑

↓Entry #2648 [older| permalink|newer] / ↓Entrée #2648 [précédente| permalien|suivante] ↓

(jeudi)

Sur une variante à temps de rétablissement constant du modèle épidémiologique SIR

Il y a quatre éternités semaines, quand nous n'étions pas encore maintenus prisonniers chez nous, j'ai parlé ici du modèle épidémiologique SIR, le plus basique qui soit. Je rappelle brièvement les principes qui le définissent :

  • l'immunité acquise est permanente, les individus sont successivement S (susceptibles, c'est-à-dire jamais infectés donc susceptibles de l'être), I (infectés et infectieux) et R (rétablis, c'est-à-dire guéris ou morts) (il existe toutes sortes de variantes, par exemple le modèle SEIR ajoutant un état E (exposé) pour les individus infectés mais non encore infectieux) ;
  • la population est homogène (fongible) avec mélange parfait dans les contacts (j'ai parlé ici de l'effet de modifier cette hypothèse) ;
  • la contamination et le rétablissement se font selon une cinétique d'ordre 1, c'est-à-dire que la contamination se fait proportionnellement aux proportions d'infectés et de susceptibles (avec une constante cinétique β), et que le rétablissement se fait proportionnellement à la proportion d'infectés (avec une constante cinétique γ).

Rappelons brièvement ce que j'ai exposé la dernière fois. Les équations de ce modèle SIR basique, que j'appellerai (*) pour m'y référer plus tard, sont les suivantes (il s'agit d'un système d'équations différentielles ordinaires non-linéaire, du premier ordre et autonomes) :

  • s′ = −β·i·s
  • i′ = β·i·sγ·i
  • r′ = γ·i
  • (s+i+r=1)

s,i,r≥0 sont les proportions de susceptibles, d'infectieux et de rétablis dans la population ; les solutions de ces équations ne semblent pas pouvoir s'exprimer en forme close, mais on peut exprimer s en fonction de r (à savoir s = exp(−κ·r) dans les conditions exposées ci-dessous).

Je rappelle les principales conclusions que j'avais exposées dans mon entrée sur ce modèle (*), en supposant qu'on parte d'une population presque entièrement susceptible avec une proportion infinitésimale d'infectés (plus exactement, on s'intéresse aux solutions pour lesquelles s→1 quand t→−∞) ; on notera κ := β/γ le nombre de reproduction, que je suppose >1 :

  • tant que s reste très proche de 1 (si on veut, t→−∞), les proportions i et r croissent comme des exponentielles de pente logarithmique βγ = β·((κ−1)/κ), avec un rapport 1/(κ−1) entre les deux, autrement dit comme i = c·exp((βγt) = c·exp(β·((κ−1)/κt) et r = c·(γ/(βγ))·exp((βγt) = c·(1/(κ−1))·exp(β·((κ−1)/κt) (ergotage : dans l'entrée sur le sujet, j'avais mis un −1 aux exponentielles pour r, parce que je voulais partir de r=0, mais je me rends compte maintenant qu'il est plus logique de partir d'une solution où i/r tend vers une constante en −∞, cette constante étant κ−1) ;
  • au moment du pic épidémique (maximum de la proportion i d'infectés), on a s = 1/κ et i = (κ−log(κ)−1)/κ et r = log(κ)/κ ;
  • quand t→+∞, la proportion i tend vers 0 (bien sûr) et s tend vers Γ := −W(−κ·exp(−κ))/κ (en notant W la fonction de Lambert) l'unique solution strictement comprise entre 0 et 1 de l'équation Γ = exp(−κ·(1−Γ)) (qui vaut 1 − 2·(κ−1) + O((κ−1)²) pour κ proche de 1, et exp(−κ) + O(κ·exp(−2κ)) pour κ grand), tandis qu'évidemment r, lui, tend vers 1−Γ.

Je veux ici explorer la modification d'une hypothèse de ce modèle (*), celle qui concerne le rétablissement. Quand j'écris ci-dessus que le rétablissement se fait proportionnellement à la proportion d'infectés (avec une constante cinétique γ), au niveau individuel, cela signifie la chose suivante :

Pendant chaque intervalle de temps de longueur (durée) dt très courte, la probabilité qu'un individu infecté (I) se rétablisse (I→R) vaut γ·dt et ce, indépendamment d'un individu à l'autre et d'un instant à l'autre.

Autrement dit, le temps de rétablissement d'un individu infecté donné suit une distribution de probabilité exponentielle d'espérance 1/γ.

Autant l'hypothèse analogue sur la cinétique de la contamination est relativement plausible (si on admet le principe éminemment discutable d'une population homogène et du mélange parfait !), autant l'hypothèse sur le temps de rétablissement est médicalement insensé : on est en train de dire que si vous êtes malade, votre probabilité de guérir (ou d'ailleurs, de mourir) ne dépend pas de l'avancement de votre maladie mais est la même pendant la première heure que pendant la 1729e (si tant est que vous soyez encore malade à ce stade-là). Une maladie ne se comporte pas comme ça !

Cherchons donc à remplacer cette hypothèse par une autre, tout aussi simpliste, mais néanmoins un peu plus proche de la réalité médicale, celle du rétablissement en temps constant.

Un individu infecté (I) se rétablit toujours au bout du même temps T après son moment d'infection.

Autrement dit, le temps de rétablissement d'un individu infecté donné suit une distribution de Dirac concentrée en T (qui est, du coup, son espérance).

↑Entry #2648 [older| permalink|newer] / ↑Entrée #2648 [précédente| permalien|suivante] ↑

↓Entry #2645 [older| permalink|newer] / ↓Entrée #2645 [précédente| permalien|suivante] ↓

(mardi)

Sur l'impact de la structure du graphe social dans le taux d'attaque des épidémies

Je suis vraiment débordé (le temps que je passe à me documenter sur l'épidémie et à répondre aux présentations biaisées et autres conneries sur Twitter représente une surcharge de travail absolument énorme qui s'ajoute au fait que tout est devenu tellement plus long et compliqué dans ma vie, je ne vais pas pouvoir tenir longtemps comme ça), donc je me contente ici de reproduire en français ce que j'ai écrit dans un fil Twitter :

Il s'agit d'expériences numériques sur l'influence de la structure du graphe social sur le taux d'attaque des épidémies (taux d'attaque = le nombre de personnes infectées cumulé pendant l'épidémie).

Rappelons la situation basique : j'ai déjà écrit ici sur mon blog (et ici en anglais sur Twitter) sur ce que prédit le modèle épidémiologique SIR au sujet du taux d'attaque. En bref, il prédit un taux d'attaque énorme : 89% (de la population touchée) pour un nombre de reproduction de 2.5. (La formule, comme je l'ai expliqué, est 1 + W(−κ·exp(−κ))/κ = 1 − exp(−κ) + O(κ·exp(−2κ)) où κ est le nombre de reproduction. Par ailleurs, il faut bien différencier ce taux d'attaque du seuil d'immunité grégaire qui, lui, vaut, 1 − 1/κ, et qui est le taux d'infectés à partir duquel l'épidémie commence à régresser, c'est-à-dire le taux d'attaque au pic épidémiologique.)

Or les épidémies réelles ne semblent pas avoir des taux d'attaque aussi énormes, même avec des nombres de reproduction de l'ordre de ce que je viens de dire. Bien sûr, on connaît mal le taux d'attaque même a posteriori, mais (malgré une absence d'immunité préalable aux souches) il semble que les grippes de 1918 et 1957 aient infecté autour de 30% de la population à différents endroits, pas franchement autour de 90%.

Alors que se passe-t-il ? Mon explication est que SIR, étant un modèle basé sur des équations différentielles, ne connaît qu'une seule chose, c'est la proportion de la population qui est susceptible, infectée et rétablie, et pas où ces personnes sont ni comment elles interagissent socialement.

Autrement dit, un tel modèle suppose un « mélange parfait » : tout individu a la même probabilité d'infecter n'importe quel autre individu. Ce n'est bien sûr pas du tout le cas dans la réalité. En réalité, une bonne proportion des contaminations suit un graphe social (famille, amis, collègues).

Même les modèles plus sophistiqués qui stratifient la population par catégories d'âge (disons) supposent toujours un mélange parfait dans chaque catégorie. Je soupçonne que c'est la raison pour laquelle le papier d'Imperial obtient un taux d'attaque si élevé (j'en ai déjà parlé dans cette entrée, voir aussi ce fil Twitter).

Alors, comment peut-on prendre en compte le fait que les contaminations suivent des graphes sociaux, et que doit-on en attendre ? Je m'attendais, et je voulais tester, deux effets apparentés mais distincts :

Le premier effet est que si l'épidémie doit suivre les liens d'un graphe social de connectivité relativement modeste (chacun n'ayant qu'un petit nombre de parents/amis/collègues par rapport à toute la population), elle va s'étouffer plus rapidement, même pour un nombre de reproduction donné, par rapport au cas de mélange aléatoire : c'est ce que j'ai essayé de dire ici sur Twitter ainsi que dans cette entrée dans la phrase la première [sous-raison] c'est (a) que quand on retire une proportion suffisamment élevées de sommets d'un graphe (en l'occurrence celui des contacts humains), il cesse de « percoler », c'est-à-dire qu'on ne peut plus passer d'un sommet à un autre. Ce phénomène est, en effet, lié à des questions de seuil de percolation dans les graphes (qui est, en gros, la proportion des sommets, ou des arêtes selon la définition, qu'il faut retirer aléatoirement à un graphe pour qu'il cesse d'avoir une composante connexe géante) : l'idée est que quand suffisamment de personnes (=sommets, =nœuds) sont immunisées, l'épidémie ne peut plus se propager d'un point à un autre : même avec l'hypothèse de mélange parfait le nombre d'immunisés ralentit l'épidémie, mais le seuil de percolation suggère qu'une proportion plus faible d'immunisés peut arrêter complètement la propagation (et, probablement, on la ralentit plus vite avant de l'arrêter complètement).

Le second phénomène est différent : non seulement il doit suffire de retirer relativement peu de nœuds pour arrêter l'épidémie (comme je viens de l'expliquer), mais en plus l'épidémie va retirer (c'est-à-dire infecter et rendre immuns) en premier les nœuds les plus « précieux » à sa propre propagation, parce que ce sont les nœuds les plus connectés, les « célébrités ». C'est ce que j'ai essayé d'exprimer ici et  (+ tweet suivant) sur Twitter, ainsi que dans la même entrée que mentionée dans la phrase (b) les infections ont tendance à infecter en premier les personnes qui sont hautement connectées dans le graphe, et en les rendant immunes, elle neutralise en premier les liens qui lui permettaient le plus facilement de se propager.

Tout ça n'est que mon intuition ! Maintenant, voyons si je peux modéliser ces phénomènes, pour au moins montrer qu'ils existent. Je ne vais pas chercher à quantifier les effets (il y a tout simplement trop de paramètres avec lesquels jouer), seulement d'illustrer qu'ils peuvent exister et semblent jouer dans la direction que je pensais.

J'ai donc écrit un petit programme Perl qui simule un modèle épidémique SEIR stochastique. SEIR, ça signifie que les nœuds (les individus) passent entre quatre états, S = susceptible = non-infecté, puis E = exposé = en incubation, puis I = infectieux et enfin R = rétabli = immunisé ou mort. Stochastique, ça signifie que plutôt que modéliser les choses avec des équations différentielles, je prends un grand nombre de nœuds (300 000 dans mes expériences) et les contaminations ont lieu au hasard. Ça rend les calculs non-reproductibles, mais cela permet de gérer des situations bien plus complexes qu'avec des équations différentielles.

↑Entry #2645 [older| permalink|newer] / ↑Entrée #2645 [précédente| permalien|suivante] ↑

↓Entry #2639 [older| permalink|newer] / ↓Entrée #2639 [précédente| permalien|suivante] ↓

(samedi)

Un tout petit peu d'épidémiologie mathématique

Dans l'entrée précédente, je soulevais entre autres la question de comment calculer (et de comment appeler !) le nombre, que j'y appelais r, de personnes qui sont finalement infectés par une épidémie (quelle que soit l'issue de cette infection) puisque c'est un des facteurs du produit f·r qui donnera le taux de mortalité due à l'infection (l'autre étant la proportion f des cas qui conduisent à un décès) ou de tout autre calcul analogue (comme g·r pour le nombre de cas graves où g est la proportion correspondante). Dans plusieurs mises à jour ultérieures de cette entrée, j'ai signalé que j'ai fini par apprendre que r s'appelle le taux d'attaque et un raisonnement simpliste pour l'estimer, que je reproduis ici parce que je vais vouloir le comparer à une estimation donnée par un modèle différent :

[Essentiellement recopié de ce fil Twitter :] Une amie m'a expliqué le rapport que je cherchais à comprendre entre le taux de reproduction de base R₀ (= nombre de personnes que chaque personne infectée infecte à son tour) et le taux d'attaque final r (= proportion de la population qui sera infectée à terme pendant l'épidémie) : dans le modèle le plus simpliste, c'est r = 1 − 1/R₀ ; en effet, tant que le taux de reproduction est >1, l'épidémie croît exponentiellement ; mais si une proportion r a déjà été infectée, le taux effectif de reproduction est ramené à R₀·(1−r) parce que, en supposant que les personnes déjà infectées sont immunisées et sont également réparties dans la population (j'ai bien dit, modèle simpliste !), seule une proportion 1−r est encore susceptible d'être contaminée ; donc l'épidémie cesse de progresser lorsque R₀·(1−r) redescend à 1, c'est-à-dire r = 1 − 1/R₀. C'est probablement la raison pour laquelle certains ont prédit r ~ 70% en l'absence de contre-mesures efficaces pour réduire R₀ qui a été initialement mesuré à R₀ ~ 3. Encore une fois, ceci est un modèle extrêmement simpliste.

Dans la suite, je vais noter plutôt κ que R₀ ce nombre de reproduction, parce que même si R₀ est la notation standard elle serait source de confusion dans le modèle SIR où la lettre R désigne les cas rétablis (guéris, recovered en anglais ; enfin, avec une drôle de définition de rétablis puisque dans le modèle qui va suivre on ne cherche pas à compter les décès et on les compte avec les guérisons). Par ailleurs, plutôt que le taux d'attaque final noté r ci-dessus (ce qui, par chance, colle bien, à la limite, avec l'usage de la lettre R que je viens d'évoquer), je vais m'intéresser plutôt à la proportion complémentaire s = 1−r, i.e., la proportion de la population qui échappe à l'épidémie, et dont le raisonnement simpliste que je viens de recopier prédit donc qu'il s'agit de 1/κ.

Maintenant, en suivant de près ce fil Twitter (ou ici sur Thread Reader), que je développe un peu un peu, je vais essayer d'expliquer la prédiction que fait un modèle basique en épidémiologie, le modèle SIR :

Le modèle SIR modélise une infection en traduisant l'évolution dans le temps de trois variables : s (susceptible) la proportion de la population qui n'a pas encore contracté l'infection (et qui est donc susceptible de l'attraper), i (infectée) la poportion de la population qui est actuellement infectée, et r (rétablie) la proportion de la population qui n'est plus infectée, que ce soit suite à une guérison ou un décès (cf. ci-dessus : on ne s'intéresse pas à la différence ici). On a s + i + r = 1 puisqu'il s'agit de trois parties exclusives et exhaustives : il y a donc seulement deux variables indépendantes. Le modèle fait toutes sortes d'hypothèses simplificatrices : notamment, que la population est constante (puisque les décès comptent parmi les guéris, ce n'est pas idiot), et surtout, que les personnes ayant contracté l'infection ne peuvent pas la contracter une seconde fois (soit parce qu'elles sont immunisées soit parce qu'elles sont décédées).

Il s'agit d'écrire une équation différentielle (non-linéaire, du premier ordre) portant sur ces variables. L'idée est d'écrire le type d'équations utilisées en cinétique chimique : imaginez qu'on aurait deux réactions chimiques, la réaction d'infection S + I → I + I (une personne infectée en infecte une autre) et la réaction de rétablissement, I → R (les personnes infectées se rétablissent toutes seules avec le temps, je rappelle une fois de plus que rétablir ici compte les décès, tout ce qui m'intéresse est que ces personnes ne puissent plus en contaminer d'autres). Ce qu'on fait en cinétique chimie (de façon ultra-simplifiée…) pour modéliser des réactions de type X + Y → Z est qu'on va écrire que l'occurrence d'une telle réaction, i.e., la variation de concentration due à cette réaction (qui va compter positivement dans la concentration de Z et négativement pour X et Y) est proportionnelle à une certaine constante cinétique (positive) fois le produit des concentrations de X et de Y à des puissances appelées l'ordre de la cinétique dans chacun de ces réactifs, typiquement 1. Dans le modèle épidémiologique SIR, les deux réactions d'infection et de rétablissement seront supposées d'ordre 1. On va appeler β et γ leurs constantes cinétiques respectives : les termes de vitesse de l'infection et du rétablissement seront donc β·i·s et γ·i respectivement. Autrement dit :

Si je note x′ la dérivée dx/dt par rapport au temps (t) de la variable x, les équations du modèle SIR seront :

  • s′ = −β·i·s
  • i′ = β·i·sγ·i
  • r′ = γ·i

(La somme de ces trois quantités fait évidemment zéro, comme il se doit puisqu'on doit conserver s+i+r=1 : comme en chimie, rien ne se crée, rien ne se perd, mais tout se transforme.) La première équation, donc, modélise le fait que la population non encore infectée décroît par la vitesse infection dans le temps β·i·s qui est proportionnelle à une constante β fois les proportions de personnes infectées i et susceptibles de l'être s : si l'on préfère, cela signifie qu'une personne susceptible a une probabilité β·i de devenir infectée par unité de temps (très petite) ; la troisième modélise le fait que les personnes infectées deviennent rétablies avec la vitesse γ·i : si l'on préfère, cela signifie qu'une personne infectée a une probabilité γ de devenir rétablie par unité de temps (très petite) ; et l'équation du milieu, donc, assure l'équilibre s+i+r=1.

La nouvelle (et énorme !) hypothèse simplificatice qu'on a faite en écrivant ces équations, c'est de supposer que le comportement « local » de l'épidémie et de la population ne change ni avec le temps ni avec le progrès de l'épidémie : la probabilité d'infection par rencontre S+I, ou de guérison, ne changent pas : ceci exclut, par exemple, le fait que la population changerait ses habitudes avec la progression de l'épidémie (prendrait des mesures prophylactique), que le système de santé soit débordé (ce qui jouerait possiblement sur le temps de guérison), que le pathogène mute pour devenir plus ou moins virulent, et toutes sortes d'autres scénarios sortant de notre modèle extrêmement basique.

Les constantes cinétiques β et γ ont pour grandeur l'inverse d'un temps : il s'agit essentiellement de l'inverse du temps espéré d'infection si toute la population est infectée et du temps espéré de guérison. Remarquons donc qu'en changeant l'échelle de temps on multiplie β et γ par la même constante : le seul paramètre sans dimension dans le modèle est le rapport κ := β/γ, qu'on interprète comme le nombre de personnes qu'une personne infectée infectera en moyenne dans une population entièrement susceptible avant d'être elle-même rétablie. Comme il s'agit du seul paramètre sans dimension, toute discussion doit se faire sur κ. C'est ce κ = β/γ qu'on appelle nombre de reproduction et qui est souvent noté R₀, mais que je préfère noter κ ici pour éviter la confusion avec la variable r.

↑Entry #2639 [older| permalink|newer] / ↑Entrée #2639 [précédente| permalien|suivante] ↑

↓Entry #2616 [older| permalink|newer] / ↓Entrée #2616 [précédente| permalien|suivante] ↓

(mardi)

Merci de ne pas faire dire n'importe quoi à Gödel !

Je m'étonne de ne pas trouver d'endroit où je me serais déjà plaint à ce sujet sur ce blog. Peut-être que je sais mal chercher et qu'un petit gnome serviable va me déterrer ça, mais même si j'ai déjà ranté à ce sujet, ça ne fait pas de mal de me répéter, après tout, radoter est un de mes super-pouvoirs :

Le théorème d'incomplétude de Gödel est sans doute le théorème mathématique le plus abusé par les non-mathématiciens. Cela tient certainement au fait qu'on peut en donner des versions dangereusement approximatives et alléchamment sensationnelles comme on ne pourra jamais tout prouver à partir desquelles il est tentant de faire un pas vers la métaphysique pour tirer des conclusions encore plus fantabuleuses. Je crois avoir vu passer des tentatives d'invoquer ce théorème pour prouver :

  • l'inexistence de Dieu (sur l'air de Gödel assure qu'on ne peut jamais tout savoir, or Dieu est censé être omniscient, donc Dieu n'existe pas),
  • l'existence de Dieu (sur l'air de Gödel assure que la logique et le raisonnement humains ne peuvent pas arriver à toute vérité, donc la vérité est au-delà de l'humain, et c'est qu'elle est divine ; ça me fait penser à cet extrait du film Ridicule)[#],
  • la supériorité de l'humain sur la machine (sur l'air de Gödel montre qu'on ne peut pas mécaniquement arriver à la vérité, mais l'intuition humaine arrive à voir que l'énoncé de Gödel est vrai, c'est donc qu'elle est supérieure à la machine),
  • l'existence de la conscience (je ne sais plus les détails, mais ça devait recouper le raisonnement précédent),
  • l'inexistence de la conscience,
  • que la vérité est inaccessible au seul raisonnement, ou inaccessible tout court,
  • que la quête d'une théorie ultime de la physique est futile,
  • etc.

[#] Une ironie supplémentaire dans l'invocation du théorème d'incomplétude de Gödel pour argumenter pour l'existence de Dieu, c'est que Gödel lui-même a inventé une « preuve » de l'existence de Dieu (ou plus exactement, une formalisation en logique modale de l'argument ontologique de Saint Anselme). Cette preuve ressemble plus à une blague qu'à un argument sérieux, en fait (Gödel introduit une série d'axiomes plus hasardeux les uns que les autres, et dont on sait maintenant qu'ils sont, en fait, sinon contradictoires, au moins amenant des conclusions complètement délirantes, et il en déduit l'existence d'un truc vérifiant la définition de Dieu), et il n'est pas clair si Gödel lui-même la prenait au sérieux. Enfin, bref.

Tous ces raisonnements sont bien sûr du pur pipo. Plus généralement, toute tentative pour donner un sens philosophique (au-delà de la philosophie des mathématiques, bien sûr : métaphysique, théologique, ou même épistémologique si on s'éloigne des mathématiques) au théorème d'incomplétude de Gödel doit être considérée comme hautement suspecte.

Ce que dit le théorème précisément, je ne vais pas le rappeler ici, je l'ai expliqué notamment ici et , avec quel succès je ne sais pas, mais en tout cas ce n'est pas mon propos ici : mon propos est que ce théorème est un énoncé technique sur la logique du premier ordre, et que toute tentative pour le faire sortir de son cadre technique est certainement une arnaque.

Même si on ne comprend pas ce que ceci signifie, peu importe : le théorème d'incomplétude affirme que

  • tout système formel en logique du premier ordre
  • qui soit récursivement (= calculablement) axiomatisé
  • et qui contient (un fragment suffisant de) l'arithmétique

ne peut pas être à la fois consistant [← anglicisme pratique pour cohérent] et complet, i.e., s'il ne prouve jamais simultanément P et ¬P (:= la négation de P), alors il y a un P pour lequel il ne prouve aucun des deux.

Ce que je veux souligner là, c'est qu'il y a des hypothèses techniques (essentiellement trois, celles que je viens de lister), et que si on omet ces hypothèses, on est probablement en train de dire des bêtises.

Plus exactement, ce que j'ai cité est plutôt le théorème d'incomplétude de Gödel-Rosser. Le théorème d'incomplétude de Gödel, ce serait que tout système formel en logique du premier ordre qui soit récursivement axiomatisé et qui contient (un fragment suffisant de) l'arithmétique ne peut pas être à la fois ω-consistant et complet, mais l'ω-consistance est une hypothèse pénible à expliquer (autant supposer le système arithmétiquement vrai, à ce compte-là) et je ne veux pas chercher des noises à ceux qui ne feraient pas la différence entre Gödel et Gödel-Rosser. (Enfin, si on veut ergoter, le théorème d'incomplétude de Gödel, il dit : Zu jeder ω-widerspruchsfreien rekursiven Klasse ϰ von Formeln gibt es rekursive Klassenzeichen r, so daß weder v Gen r noch Neg (v Gen r) zu Flg(ϰ) gehört (wobei v die freie Variable aus r ist) — et j'avoue que j'ai beau connaître l'allemand, avoir lu l'article par le passé, et avoir une bonne idée de ce que c'est censé vouloir dire, ce n'est pas super clair pour autant pour moi. Mais je pense qu'il est raisonnable de qualifier l'énoncé ci-dessus de théorème d'incomplétude de Gödel.)

L'absence de mention de ces trois hypothèses doit être un drapeau rouge à double titre. D'abord, que le raisonnement est suspect (si on invoque un théorème sans vérifier ses hypothèses, alors que celles-ci sont indispensables, c'est sans doute que le raisonnement est incorrect — bien sûr il peut arriver qu'on ne le dise pas explicitement parce que la satisfaction de telle ou telle hypothèse est évidente et se passe de commentaire, mais dans le cas présent, j'ai du mal à imaginer que ce soit possible). Ensuite, que la personne qui tient le raisonnement ne comprend probablement pas bien le théorème qu'elle prétend appliquer si elle n'en connaît pas les hypothèses exact et le sens de celles-ci. Un autre signe à cet égard est d'ailleurs quand on parle du théorème de Gödel comme s'il n'y en avait qu'un (alors que, sans aller chercher loin, Gödel a aussi pondu un théorème de complétude qui très superficiellement et mal interprété pourrait avoir l'air de dire exactement le contraire du théorème d'incomplétude) ; ceci dit, il ne faut pas non plus accorder trop de valeur à ce signe parce que beaucoup de mathématiciens tout à fait sérieux sont susceptibles de parler du théorème de Gödel (ou d'autres auteurs : je parle régulièrement du théorème d'Euler — pour l'affirmation que aφ(m)≡1 (mod m) si a est premier à m — alors qu'Euler a démontré des milliers de théorèmes).

↑Entry #2616 [older| permalink|newer] / ↑Entrée #2616 [précédente| permalien|suivante] ↑

↓Entry #2601 [older| permalink|newer] / ↓Entrée #2601 [précédente| permalien|suivante] ↓

(samedi)

Comment répondre à la question à quoi ça sert ? en maths et sciences fondamentales

Je me livre ici à quelques réflexions (un peu décousues, je dis toujours ça), autour de la question à quoi servent les maths pures, et les sciences fondamentales en générales ?, sur la notion d'utilité et d'applications pratiques. Pas sûr que tout ce que je dise soit très cohérent (je passe sans véritable transition du rapport entre lettres et sciences au rapport entre enseignement et recherche sans développer adéquatement ni l'un ni l'autre), mais j'espère au moins arriver à faire passer l'idée qu'il ne faut pas accepter sans broncher les préjugés les plus banals à ce sujet.

J'ai l'impression que dans l'esprit de beaucoup de gens[#], il y a une dichotomie (assez claire même si elle n'est pas forcément clairement énoncée) entre : d'un côté les sciences et techniques, dont l'importance dans la société et notamment dans l'enseignement est justifiée par leur utilité pratique, et d'autre part les arts et aux lettres et autres humanités, dont l'importance est justifiée par leur rôle culturel. Si je reformule cette idée dans des termes qui sentent bon la fin du 19e siècle et que je mets quelques majuscules d'emphase : on aurait d'un côté ce qui meut l'Humanité sur le chemin du Progrès, et de l'autre ce qui Éclaire ce chemin en montrant la voie vers le Progrès et le distinguant des Ténèbres alentours. Ou quelque chose comme ça. Ce que je veux dire, c'est que dans cette vision des choses, on a d'un côté des domaines comme la médecine ou la physique qui apportent des bienfaits à l'Homme, et de l'autre, ceux comme la philosophie et l'Histoire qui doivent en quelque sorte alimenter son sens moral.

[#] J'accepte bien volontiers que j'énonce peut-être ici un métapréjugé (i.e., un préjugé sur les préjugés que peuvent avoir les gens) : mais ce n'est pas bien grave si je dénonce une idée qui, en fait, n'existe pas vraiment.

Peut-être que je caricature un peu, mais je pense au moins que l'idée est assez répandue que la raison pour laquelle on doit enseigner l'Histoire et la géographie au lycée est que ces disciplines feraient partie de la « culture générale » que tout bon citoyen doit avoir, tandis que la raison pour laquelle on doit enseigner les mathématiques est qu'elles seraient utiles pour toutes sortes de choses.

Bref, je pourrais m'appesantir à dénoncer le stéréotype du littéraire qui considère que la culture générale se limite aux choses qu'il connaît ; qui pense qu'il est indispensable que tous les lycéens français sachent que Le Cid est une pièce de Corneille, que la cinquième république a été établie en 1958 et que les Pyrénées sont à la frontière entre la France et l'Espagne ; mais qui ne sait pas citer une loi de Newton ou de la thermodynamique, ignore si les plantes sont des eucaryotes ainsi que la différence entre une bactérie et un virus, n'a absolument aucune idée du fonctionnement d'Internet ou du Web, et ne sait peut-être même pas dire combien il y a de millimètres cubes dans un mètre cube ; et si on lui montre du doigt ces incohérences, répondra qu'il a fait des études littéraires et que ces questions techniques sont bien plus pointues et d'ailleurs ne lui servent à rien puisqu'il n'est pas scientifique ; et consentira peut-être à donner comme exemple de culture générale scientifique à peu près la seule chose qu'il sait, disons, que la Terre tourne autour du Soleil et pas le contraire. Je caricature ? En fait, non : j'en ai rencontré plus d'un, comme ça, qui se plaignaient que les jeunes ne savaient plus rien de nos jours, et qui démontraient immédiatement après une ignorance crasse et assumée dans tout domaine scientifique (j'ai le souvenir, par exemple, de quelqu'un qui ne savait pas de quoi était fait un atome, et qui avait l'air de trouver totalement fantaisiste la suggestion que cela pouvait faire partie de la culture générale de le savoir). Mais j'ai déjà parlé de ça dans cette entrée passée, et je ne veux pas la répéter ici. J'écrirai Un Jour® une entrée sur la culture générale et l'effet de perspective dont tout le monde est victime — et je m'inclus dans le tout le monde — qui fait qu'on croit toujours indispensables les savoirs qu'on a soi-même et superflus ceux que l'on n'a pas[#2]. [Mise à jour : c'est ici.] Nous avons tous des trous énormes dans notre « culture générale », et c'est normal : ce qui me dérange plus, en fait, est qu'à une époque où nous avons tous tout le savoir du monde à la portée de nos doigts, l'attitude consistant à ne pas se précipiter sur Wikipédia quand on découvre l'existence d'un de ces trous. Mais tout ça est une digression par rapport au sujet général de cette entrée, est je la referme maintenant.

[#2] Ceci vaut d'ailleurs encore au sein d'un domaine : les mathématiciens, par exemple, croient toujours que les outils et théorèmes mathématiques qu'ils connaissent et manipulent sont centraux dans les mathématiques et qu'il est indispensable de les connaître, alors que tout ce qui sort de leur domaine de prédilection est quelque chose d'arcane.

Toujours est-il que cette attitude consistant à imaginer que les sciences doivent être jugées à l'aune de leur utilité déteint au sein des sciences elles-mêmes, et que les scientifiques se retrouvent à justifier leur travail, notamment leur recherche pour ceux qui sont chercheurs, en expliquant que ça peut servir à quelque chose (et disons-le franchement, la plupart de ces justifications sont bidon, ce qui est normal parce que quand on découvre des choses nouvelles, on ne peut pas encore savoir où elles nous mèneront). Et ce n'est pas tout : la notion d'utilité est elle-même insidieusement réduite à celle d'applications.

Dans ces conditions, les sciences pures sont dans une situation très inconfortable d'apparence paradoxale : puisqu'elles sont des sciences, elles sont censées servir à quelque chose, mais puisqu'elles sont pures, elles n'ont pas d'applications ; donc à force d'accepter les différentes idées stupides que j'ai énoncées plus haut, on en revient à devoir trouver des justifications comme ah, mais on ne peut pas encore savoir si ceci aura un jour des applications. Avec comme exemple représentatif la théorie des nombres, que Gauß ou je ne sais qui considérait comme la reine des mathématiques parce qu'elle n'avait pas d'applications et qui finit par en avoir, et d'importance économique absolument capitale, à travers la cryptographie. Cet exemple est juste mais il est trompeur : je veux dire qu'au lieu d'essayer de trouver des justifications dans des exemples pareils, on ferait mieux de rejeter les prémisses idiotes que les sciences sont justifiées par leur utilité et que la seule forme d'utilité est dans les applications pratiques.

Au lieu de ça, la comparaison que j'aime donner est la suivante : imaginer qu'on puisse se passer des sciences pures pour se focaliser sur les applications est comme imaginer qu'on puisse couper les racines d'un pommier parce qu'il n'y a pas de pommes qui poussent dessus. Ce que je veux dire par là est que les sciences, et le savoir humain en général, est comme un être vivant : les différentes parties s'irriguent conceptuellement les unes les autres ; certaines produisent des applications directes, d'autres non, mais s'imaginer qu'on peut amputer des parties sans ruiner la santé de l'ensemble est tout simplement stupide.

↑Entry #2601 [older| permalink|newer] / ↑Entrée #2601 [précédente| permalien|suivante] ↑

↓Entry #2598 [older| permalink|newer] / ↓Entrée #2598 [précédente| permalien|suivante] ↓

(dimanche)

Sur les fonctions réelles continues et le compactifié de Stone-Čech

Le contenu de cette entrée est presque complètement inclus dans le très classique, et remarquablement bien écrit, livre de Leonard Gillman & Meyer Jerison, Rings of Continuous Functions (1960), qui contient d'ailleurs bien d'autres choses intéressantes. Mais j'en avais assez de perdre du temps à retrouver des choses contenues dans ce livre à chaque fois que je les oublie, donc je voulais me faire un aide-mémoire, et à ce moment-là autant le mettre en ligne sur mon blog, d'autant plus qu'il s'agit là de culture générale mathématique (que, selon moi, tout mathématicien devrait avoir, — au moins pour les grandes lignes de ce que je raconte, évidemment, disons les « spoilers » ci-dessous, pas les détails un peu arcanes sur les espaces d'Urysohn et les réelcompacts). Mais mon exposition est assez différente de celle de Gillman & Jerison, et pas seulement parce que le fait de ne pas donner de preuves permet de réorganiser les résultats dans un ordre parfois plus satisfaisant, mais aussi parce que j'ai cherché à développer autant que possible les parallèles entre les faits annoncés, et j'ai une approche un tout petit peu plus « catégorique ».

Comme j'ai écrit énormément de choses très rapidement, y compris des choses qui ne sont pas verbatim dans la littérature (je ne m'en éloigne guère, mais parfois je change un peu les hypothèses ou les conventions, et il faut donc adapter les énoncés : par exemple, Gillman & Jerison supposent les espaces complètement réguliers quand il s'agit de décrire le compactifié de Stone-Čech, ce qui me déplaît énormément ; parfois aussi, quand j'interpole des résultats, je fais une démonstration dans ma tête, mais je n'ai pas tout vérifié avec le soin le plus absolu), il est probable que j'aie fait un certain nombre d'erreurs. On va dire que le but du jeu est de les retrouver !

Je suppose que le lecteur sait déjà ce qu'est un espace topologique et une fonction continue entre espaces topologiques (ainsi que les autres termes de base de la topologie générale : ouverts, fermés, voisinages, intérieur, adhérence, homéomorphisme, sous-espace / topologie induite, topologie produit, espace compact [:= compact séparé], ce genre de choses — cf. par exemple ce glossaire ou différentes pages de ce wiki). Mais je ne suppose pas que le lecteur sait ce qu'est, par exemple, un espace complètement régulier. Je suppose aussi connues les notions d'anneau [sous-entendu : commutatif], ou plutôt de ℝ-algèbre [commutative], et d'idéal d'un tel anneau (et je rappelle qu'un idéal maximal d'un anneau est un idéal ≠(1) et maximal pour l'inclusion parmi les idéaux ≠(1), ou, ce qui revient au même, un idéal tel que quand on quotiente l'anneau par lui on obtient un corps).

Remarque informatique : J'utilise dans ce qui suit les caractères ‘𝔪’, ‘𝔬’, ‘𝔭’, ‘’ et ‘𝒰’ pour, respectivement, un ‘m’ gothique minuscule, un ‘o’ gothique minuscule, un ‘p’ gothique minuscule, un ‘F’ cursif et un ‘U’ cursif. Comme ces caractères peuvent parfois manquer dans des polices j'ai prévu un peu de magie en JavaScript qui remplacera en un seul clic tous ces symboles par des lettres latines toutes bêtes : donc, si vous ne voyez pas les caractères que je viens de nommer, cliquez ici pour activer ce remplacement.

✱ Si X est un espace topologique, on note C(X) l'ensemble des fonctions réelles continues X→ℝ, avec l'addition et la multiplication point à point (c'est-à-dire que f+g est la fonction xf(x)+g(x) et que fg est la fonction xf(x)⁢g(x)) ; chaque réel c est identifié à la fonction constante xc dans C(X). (C'est donc un anneau commutatif et même une ℝ-algèbre commutative. On peut le munir d'autres structures, notamment un ordre partiel défini par fg lorsque f(x)≤g(x) pour tout xX, qui est d'ailleurs un treillis avec fg la fonction xf(x)∨g(x) := max(f(x),g(x)) et fg la fonction xf(x)∧g(x) := min(f(x),g(x)), et une valeur absolue |f| = f∨(−f). On peut éventuellement aussi introduire une ou plusieurs topologies sur C(X), mais ce n'est pas ce qui va m'intéresser ici ; en revanche, je souligne qu'on n'a pas de norme intéressante sur C(X).)

À côté de C(X), on a C*(X) qui est formé des fonctions réelles continues bornées c'est-à-dire les f∈C(X) telles qu'il existe un B∈ℝ tel que pour tout xX on ait |f(x)|≤B. Il est évident que la somme et le produit de deux fonctions bornées sont bornés, si bien que C*(X) est un sous-anneau de C(X).

On peut par ailleurs noter que C et C* sont des foncteurs contravariants des espaces topologiques vers les ℝ-algèbres commutatives, ce qui signifie que donnée une application continue h:XY on fabrique de façon évidente des morphismes C(Y)→C(X) et C*(Y)→C*(X) (remarquer le sens des flèches !), simplement par composition à droite par h, c'est-à-dire qu'elles envoient une fonction continue f:Y→ℝ [éventuellement bornée] sur la composée fh:X→ℝ. On peut noter C(h):C(Y)→C(X) et C*(h):C*(Y)→C*(X) pour ces deux morphismes de « composition à droite par h ». La « fonctorialité » signifie simplement que (i) si id:XX est l'identité alors C(id) et C*(id) sont aussi l'identité, et (ii) si h:XY et k:YZ alors C(kh)=C(h)∘C(k) et C*(kh)=C*(h)∘C*(k).

✱ La problématique qui m'intéresse est de décrire le rapport entre l'espace X et son C(X) et son C*(X), comment on peut retrouver l'un à partir de l'autre, ce genre de choses.

Plus précisément, parmi les questions qu'il est naturel de se poser :

  • La ℝ-algèbre C(X) caractérise-t-elle l'espace topologique X ? Permet-elle de le retrouver (autrement dit, si X₁ et X₂ ont « le même » C(X), c'est-à-dire que C(X₁) et C(X₂) sont isomorphes en tant que, disons, ℝ-algèbres, alors X₁ et X₂ sont-ils homéomorphes) ? Dans les cas où c'est possible, comment peut-on reconstruire X à partir de C(X) ? Par ailleurs, peut-on identifier les ℝ-algèbres qui apparaissent comme des C(X) ? Peut-on, d'ailleurs, retrouver la structure de ℝ-algèbre (i.e., les fonctions constantes et leur isomorphisme avec ℝ) à partir de celle d'anneau ?
  • Mêmes questions pour C*(X).
  • Quel est le rapport entre C(X) et C*(X) ? Peut-on identifier les fonctions bornées de façon purement algébrique ? Pour quel genre d'espace a-t-on C(X) = C*(X) (toutes les fonctions continues sont bornées) ? Comment les ℝ-algèbres qui apparaissent comme des C(X) se situent-elles parmi ceux qui apparaissent comme des C*(X) ? Peut-on notamment trouver un espace Xˆ (en fonction de X) pour lequel on aurait C(Xˆ) = C*(X) (ou le contraire) ?

(Digression : J'ai essayé d'écrire là les questions qu'il me semble qu'on « devrait » vraiment spontanément se poser — et donc chercher à résoudre — dès qu'on introduit ce genre de constructions, sans préjuger de celles qui ont une réponse plus ou moins intéressante. Je trouve toujours agaçants les livres qui traitent d'un sujet mathématique et qui omettent une question qui me semble « évidemment naturelle », ne serait-ce que pour dire qu'on ne connaît pas de réponse satisfaisante ou que les auteurs n'en connaissent pas.)

Quelques spoilers :

  • La ℝ-algèbre C*(X) caractérise l'espace X pour les espaces compacts [séparés]. On pourra alors reconstruire X comme l'ensemble des idéaux maximaux de C*(X). Je crois qu'on ne sait pas caractériser de façon algébrique satisfaisante les ℝ-algèbres C*(X). En revanche, donné un espace topologique X, il y a un unique espace compact βX pour lequel C*(βX) = C*(X) (c'est donc un choix canonique d'espace X′ ayant ce C*(X)) : on l'appelle le « compactifié de Stone-Čech » de X. En général, dire que C*(X₁) et C*(X₂) sont isomorphes va signifier que les espaces ont le même compactifié de Stone-Čech.
  • La ℝ-algèbre C(X) caractérise l'espace X pour tous les espaces dits « réelscompacts » (ce qui inclut énormément de choses, par exemple tous les espaces métriques). On pourra alors reconstruire X comme l'ensemble des idéaux maximaux de C(X) tel que le quotient soit ℝ. Je crois qu'on ne sait pas caractériser de façon algébrique satisfaisante les ℝ-algèbres C(X). En revanche, donné un espace topologique X, il y a un unique espace réelcompact υX pour lequel C(υX) = C(X) (c'est donc un choix canonique d'espace X′ ayant ce C(X)) : on l'appelle le « réelcompactifié [de Hewitt-Nachbin] » de X. En général, dire que C(X₁) et C(X₂) sont isomorphes va signifier que les espaces ont le même réelcompactifié.
  • Les C*(X) sont des cas particuliers des C(X), par cela je veux dire que pour tout espace topologique X il existe un espace Xˆ pour lequel on a C(Xˆ) = C*(X), et (d'après ce qui précède) ceci caractérise complètement Xˆ si on lui impose de plus d'être compact : c'est là aussi le compactifié de Stone-Čech de X (noté βX). On peut caractériser algébriquement les fonctions bornées au sein de C(X) puisqu'on peut même caractériser l'image de f∈C(X), à savoir l'ensemble des c∈ℝ tels que fc ne soit pas inversible dans C(X). Les espaces pour lesquels C(X) = C*(X), ou simplement pour lesquels C(X) est un C*(X′), sont les espaces dits « weierstrassiens » ou « pseudocompacts » (et c'est notamment le cas des espaces compacts).

↑Entry #2598 [older| permalink|newer] / ↑Entrée #2598 [précédente| permalien|suivante] ↑

↓Entry #2592 [older| permalink|newer] / ↓Entrée #2592 [précédente| permalien|suivante] ↓

(lundi)

Quelques mots (essentiellement méta) sur l'intuitionnisme et les mathématiques constructives

Cela fait un certain temps que je me dis que je devrais écrire une ou plusieurs entrées sur ce blog sur des sujets tournant autour de la logique intuitionniste et des mathématiques constructives. La présente entrée est une sorte de TODO étendu où je mélange, de façon malheureusement confuse et désorganisée, des remarques introductives voire vulgarisatrices sur le sujet (et expliquant de quoi il est question), des remarques d'ordre méta (où je dis que je devrais parler de ceci ou de cela, ou bien me demande comment je pourrais le faire, ou encore me dis que je ne comprends pas bien telle ou telle chose) et des explications de fond assez disparates (et faites à des niveaux de prérequis, il faut bien le dire, complètement incohérents). Même l'ordre dans lequel je dis les choses est assez bizarre (à la limite, je me demande s'il ne vaut pas mieux lire cette entrée en commençant par la fin). Je pense que ça vaut quand même la peine de publier tout ça, en conseillant au lecteur de simplement sauter les passages qui lui semblent obscurs (puisque de toute façon il y a très peu de dépendances dans ce que je vais raconter).

En fait, au départ, je me suis surtout dit que ce serait intéressant d'écrire quelque chose sur le topos effectif et la réalisabilité de Kleene. Je peux au moins recopier l'introduction informelle que j'ai commencé à rédiger à ce sujet :

Pour dire très très très sommairement et très très très vaguement de quoi il est question,

  • un topos est une sorte de « monde mathématique alternatif » régi par les lois de la logique intuitionniste (une logique plus faible que la logique usuelle, ou classique, dans laquelle on a essentiellement supprimé la loi du tiers exclu qui affirme que toute formule logique est soit vraie soit fausse, ou, de façon équivalente, que tout ce qui n'est pas faux est vrai) ; de façon un peu plus précise, un topos est une catégorie (peu importe ce qu'est exactement une « catégorie ») qui possède un certain nombre de propriétés communes avec la catégorie des ensembles, ce qui permet d'y mener un certain nombre de constructions mathématiques usuelles, mais dont le comportement va néanmoins être différent sur un certain nombre de choses, et notamment la logique ; et
  • le topos effectif est un topos particulier qui présente un intérêt particulier en calculabilité : il présente un monde alternatif dans lequel toutes les fonctions ℕ→ℕ sont calculables, ce qui nous offre un regard neuf sur la calculabilité par rapport à sa présentation classique, où la logique intuitionniste éclaire ce que sont les raisonnements effectifs (voir à ce sujet cet article introductif d'Andrej Bauer, qui ne parle pas du topos effectif mais explique en quoi travailler en logique intuitionniste peut rendre plus facile ou plus naturelle la calculabilité).

Mais reculons d'un cran : pour parler du topos effectif, je me suis dit qu'il fallait d'abord que j'écrive quelque chose sur la réalisabilité de Kleene, qui en est en quelque sorte le prélude. (Si vous voulez savoir très très très sommairement et très très très vaguement de quoi il est question, S. C. Kleene a introduit dès 1945 une notion appelée « réalisabilité », en tentant de donner un sens précis à l'intuitionnisme, et — en très très très gros — le fait qu'une formule arithmétique φ soit « réalisable » [par un entier naturel n] signifie que n en apporte une sorte de « témoignage algorithmique », par exemple, si φ est une formule du type ∀x.ψ(x) affirmant que ψ(x) est vraie pour tout x, alors « réaliser » cette formule va se faire en apportant un programme qui prend en entrée un entier k et en sortie calcule un entier qui réalise ψ(k) ; pour un peu plus de détails, voir le début de cette question que j'ai posée sur MathOverflow, ou pour encore plus, voir le texte Realizability: An [sic] Historical Essay de Jaap van Oosten.) Le lien entre la réalisabilité de Kleene et le topos effectif est très fort : disons que le topos effectif est défini en cherchant une généralisation assez directe de la réalisabilité à des formules plus complexes que celles de l'arithmétique (et les formules arithmétiques qui sont réalisables sont exactement celles qui sont vraies dans le topos effectif).

Ajout : voir cette entrée ultérieure au sujet de la réalisabilité de Kleene, où je la définis proprement ; en voici depuis un sur la réalisabilité propositionnelle. Nouvel ajout : le billet sur le topos effectif est ici.

Bon, mais je me suis alors rendu compte que ce serait commencer in media res de parler du topos effectif ou même de réalisabilité si je ne commençais pas par parler d'intuitionnisme ou de mathématiques constructives. Et là, je suis embêté par le fait que j'ai à la fois trop de choses à dire et pas assez (trop, parce que ça touche à énormément de sujets ; pas assez, parce qu'en ce faisant ça touche aussi à trop de questions sur lesquelles je ne sais pas grand-chose).

Ajout : ce nouveau billet est une tentative de réécriture complète de celui qui suit, et il est peut-être plus clair (ou peut-être que les deux s'éclairent l'un l'autre, je ne sais pas).

La logique intuitionniste est une logique plus faible que la logique classique dans laquelle on s'interdit la loi du tiers exclu (qui dit que tout énoncé P est soit vrai soit faux ; c'est-à-dire : P∨¬P) ; cela revient essentiellement à s'interdire le raisonnement par l'absurde (ou plus exactement, le raisonnement par l'absurde de la forme je veux montrer P : supposons par l'absurde que P soit faux <…>, j'arrive à une contradiction, donc P ne peut pas être faux, c'est-à-dire qu'il est vrai — c'est la dernière partie qui coince en logique intuitionniste ; en revanche, on peut toujours dire je veux montrer que P est faux : supposons par l'absurde que P soit vrai <…>, j'arrive à une contradiction, c'est-à-dire que P est faux, parce que P est faux signifie précisément que la vérité de P est absurde). Faire des maths sans le tiers exclu peut ressembler à un exercice aussi futile qu'essayer de boxer avec les deux mains attachées derrière le dos, et dans une certaine mesure ça y ressemble effectivement, mais cela présente néanmoins un certain intérêt : non seulement c'est intéressant du point de vue de la pure logique de se demander ce qu'on peut faire sans cet axiome (et cette question a des connexions inattendue avec toutes sortes d'autres parties des mathématiques) ; mais par ailleurs, une démonstration en logique intuitionniste apporte véritablement plus de contenu qu'une démonstration classique : pour commencer, elle est valable de façon plus large (et notamment dans les topoï [pluriel de topos]), mais aussi, elle est constructive (au moins si on part de certains axiomes), c'est-à-dire qu'elle exhibe les objets dont elle affirme l'existence.

Une des idées centrales des maths constructives (qui sont à peu près, quoique pas forcément exactement, la même chose que les mathématiques exercées dans le cadre de la logique intuitionniste) est que si on veut prouver P ou Q (en symboles, PQ), il devrait être suffisant mais aussi nécessaire de prouver soit P, soit Q (et notamment, de savoir lequel des deux est vrai !) : ceci va manifestement complètement à l'encontre du tiers exclu qui postule que pour tout énoncé P, soit P est vrai soit ¬P l'est, sans qu'on puisse forcément trancher lequel (et parfois, effectivement, on ne peut prouver ni l'un ni l'autre). De même, si on veut prouver il existe un x tel que P(x) (en symboles, ∃x.P(x)), il devrait être suffisant mais aussi nécessaire d'exhiber un x pour lequel on peut prouver P(x) : de nouveau, ceci va à l'encontre des raisonnements par l'absurde qui ressemblent à supposons qu'aucun tel x n'existe <…>, j'arrive à une contradiction, donc un tel x doit exister (mais au final ne donnent aucune information pour en construire un).

Ajout () : Juste après avoir publié cette entrée je me rends compte que j'ai oublié d'insérer un paragraphe que je comptais écrire sur l'interprétation de Brouwer-Heyting-Kolmogorov qui tente d'expliquer au moins informellement le sens des connecteurs de la logique intuitionniste. Spécifiquement, il s'agit de variations autour des explications suivantes :

  • une preuve de PQ (conjonction) est un couple formé d'une preuve de P et d'une de Q,
  • une preuve de PQ (disjonction) est la donnée d'une preuve de P ou d'une preuve de Q (avec, bien sûr, l'information de laquelle des deux),
  • une preuve de PQ (implication) est une manière de transformer une preuve de P en une preuve de Q,
  • une preuve de ⊤ (le vrai) est triviale,
  • une preuve de ⊥ (le faux) n'existe pas,
  • une preuve de ∀x.P(x) est une manière de transformer un x en une preuve de P(x),
  • une preuve de ∃x.P(x) est la donnée d'un t particulier et d'une preuve de P(t).

↑Entry #2592 [older| permalink|newer] / ↑Entrée #2592 [précédente| permalien|suivante] ↑

↓Entry #2590 [older| permalink|newer] / ↓Entrée #2590 [précédente| permalien|suivante] ↓

(mardi)

Encore une tentative pour expliquer Gödel

Méta : J'ai écrit un fil un peu long sur Twitter pour tenter d'expliquer le théorème de Gödel, qui reprend grosso modo des idées de cette entrée passée (au moins la partie sur Gödel de celle-ci) mais en mettant l'accent un peu différemment et donnant plus de détails sur les conditions de prouvabilité. Comme ça peut être un complément intéressant et que tout le monde n'aime pas le format Twitter, je reproduis ici ce que j'y ai dit, en reformatant un minimum (en revanche, mon style sur Twitter est sans doute un peu différent de mon style sur ce blog, et je n'ai pas le courage de reformuler plus qu'a minima) :

Je fais d'abord une tentative pour lever la confusion au sujet formalisme. Quand on formalise les [raisonnements] mathématiques, on les décrit sous forme de manipulations de suites de symboles (« syntaxe ») qui obéissent à des règles bien précises. Il est évident que si on demande que les règles de raisonnement elles-mêmes soient formalisées en mathématiques, on a une régression infinie : si quelqu'un prétend ne comprendre que ce qui est formel, c'est turtles all the way down, on ne peut rien démarrer… Pour que le bootstrap soit possible, il faut bien accepter l'idée de décrire les règles de manipulation de la logique en français, ou en faisant appel à des notions mathématiques elles-mêmes pas formalisées (mais néanmoins précises) ! (Refuser cette idée ce serait comme refuser qu'on puisse jouer aux échecs sous prétexte que les règles des échecs n'ont pas été formalisées dans ZFC. Or personne ne pense qu'on a besoin de ZFC pour jouer aux échecs !)

En revanche, ce qu'on peut faire, c'est une fois qu'on a accepté ces règles et construit un système formel avec, utiliser ce système formel pour revisiter (« refléter ») les règles, cette fois-ci formellement : autrement dit, on reconstruit tout le système qu'on a déjà construit, mais on le fait cette fois-ci à l'intérieur du système « externe » qui a été construit informellement. Il y a une mise en abyme. Je parlerai de système interne pour celui qu'on construit ainsi.

Typiquement, ça se fait avec un truc appelé codage de Gödel : si le système externe contient l'arithmétique, on dit qu'on peut refléter toutes les règles formelles comme des manipulations arithmétiques pour fabriquer le système informel. Le code de Gödel d'une formule, c'est l'entier qui représente cette formule (et qui devient, du coup, manipulable par le système externe). Du coup les énoncés comme P est prouvable (qui sont, à la base, informels, parlant du système externe) deviennent des énoncés formels du système externe et qui parlent du système interne. Des énoncés arithmétiques. (Je noterai P plus bas pour P est prouvable.)

Et là, il y a une sorte de postulat épistémologique, qui est que ce que :

Les règles du système interne (formalisées dans le système externe) reflètent correctement les règles du système externe lui-même.

Donc si on croit que le système externe ne dit pas de conneries, et s'il dit que le système interne ne peut pas prouver <ceci-cela>, alors effectivement le système externe ne peut pas prouver <ceci-cela>. (Un ultra-formaliste pourrait rejeter ce postulat et dire : pour moi, les maths formelles sont juste un jeu typographique dénué de sens, le système externe ce sont les règles du jeu, le prétendu système interne n'a pas de sens, pas plus qu'aucun énoncé du jeu. Mais en vrai, les gens font des maths parce qu'ils croient qu'une preuve du fait que 2+2=4 apporte quelque information sur le monde réel, donc il y a bien une connexion entre le système externe, qui vit dans le monde réel, et le système interne, formalisé.)

Accessoirement, les systèmes externe et interne n'ont pas vraiment besoin d'être les mêmes : en fait on a besoin de très peu d'axiomes pour faire fonctionner Gödel. Mais je ne sais pas si ça aide de dire ça. Donc restons dans l'idée que ce sont « les mêmes ».

Maintenant, de quels ingrédients a-t-on besoin pour prouver Gödel ? On a besoin des trois « conditions de prouvabilité de Hilbert-Bernays » (que je noterai (A), (B), (C)), et de l'astuce de Quine. Expliquons ça successivement :

Les conditions de prouvabilité de Hilbert-Bernays remplacent le postulat épistémologique dont j'ai parlé plus haut par quelque chose de précis et de formel. En gros, elles font le lien entre les niveaux externe et interne (et interne², cf. plus bas).

Première chose : (A) si le système externe prouve un énoncé P, alors il prouve que le système interne prouve P [ou plutôt, le code de Gödel de P]. Pourquoi ? Parce que si on a une preuve de P, on peut « refléter » cette preuve : la réécrire comme une preuve formelle dans le système interne, et ceci fournit une preuve de son existence dans le système externe. Bien sûr, tout ce que je viens de dire est informel, puisque (A) est par essence informel ! Mais si on applique ça à un P bien précis et une preuve de P formelle explicite, la recette que je viens de dire donne une preuve tout à fait explicite et formelle (dans le système formel externe) de l'existence d'une preuve dans le système interne. Donc, si on veut, (A) est un métathéorème informel : en soi il n'est pas formel, mais il s'instancie en des théorèmes formels (du système externe) dont on a la recette de construction.

Maintenant on peut refaire tout ça avec un niveau de plus (on a alors trois systèmes : l'externe est informel, l'interne est formalisé dans le système externe, et l'interne² dans le système interne — ça s'arrêtera là) : Tout ce que j'ai dit sur le (A) vaut de nouveau et donne, cette fois, une preuve formelle (dans le système externe) du fait (B) suivant : si le système interne prouve P alors il prouve que le système interne² prouve P. Cette fois c'est un vrai théorème du système externe, pas juste un métathéorème informel.

Enfin, (C) dit que si le système interne prouve [le code de Gödel] de PQ et [celui de] P, alors il prouve [celui de] Q. Ça c'est juste le fait qu'on a la règle de modus ponens dans le système interne (c'est presque une définition).

Bref, si je note □P l'énoncé (du système externe) qui dit qu'il existe une preuve de P dans le système interne, mes conditions de prouvabilité sont :

  • (A) si P est un théorème alors □P en est un,
  • (B) □P⇒□□P est un théorème,
  • (C) □(PQ)⇒□P⇒□Q est un théorème

(tous ces théorèmes dans le système externe ! et ce, quels que soient les énoncés P et Q).

Maintenant, l'astuce de Quine (en fait, le procédé diagonal), c'est quelque chose qui permet de fabriquer un énoncé G tel que G⇔¬□G (démontrablement dans le système externe !), autrement dit un énoncé qui dit je ne suis pas un théorème.

L'astuce fonctionne exactement comme la manière dont on écrit des programmes qui écrivent leur propre code, chose que j'explique en détails dans cette page web consacrée aux quines. On fabrique une formule R(x) (du système externe) qui dit si x est une formule du système interne ayant une variable libre, et qu'on remplace cette variable par le code de Gödel de x elle-même, alors le résultat n'est pas un théorème (du système interne), ou de façon encore plus informelle, R(x) signifie x(‘x’) n'est pas un théorème (soit ¬□x(‘x’)) en notant ‘x’ le code de Gödel de x. Mais du coup, R(‘R’) équivaut à R(‘R’) n'est pas un théorème (soit ¬□R(‘R’)), et c'est ça que je note G.

[Ajout par rapport au fil Twitter:] Dans la présentation informelle proposée par Hofstadter, G est en gros la phrase suivante : Si on prend le morceau de phrase suivant et qu'on le fait suivre (après deux points) de lui-même entre guillemets, on obtient quelque chose qui n'est pas un théorème : Si on prend le morceau de phrase suivant et qu'on le fait suivre (après deux points) de lui-même entre guillemets, on obtient quelque chose qui n'est pas un théorème — l'astuce est de dire cet énoncé n'est pas un théorème sans passer par une référence à cet énoncé que notre système formel ne permet pas de faire ; ceci est exactement parallèle au mécanisme des quines qui permettent de coder imprimer ce programme dans un langage qui ne permet pas une référence à ce programme.

Une fois qu'on a ces ingrédients, la preuve de Gödel est pure manipulation formelle. Tout le raisonnement est tenu dans le système externe (mais parle du système interne — voire interne² quand il y a des □□) :

Supposons □G. Alors □□G d'après (B). Mais la preuve (explicite !) de G⇒¬□G donne □(G⇒¬□G) d'après (A). Or □G et □(G⇒¬□G) donnent □¬□G par (C). Or □□G et □¬□G (i.e. □(□G⇒⊥)) donnent □⊥ d'après (C). Bref, on a prouvé □G⇒□⊥ soit ¬□⊥⇒¬□G. C'est-à-dire (qu'on a prouvé dans le système externe) que si le système interne prouve G alors il prouve ⊥ (c'est-à-dire 0=1). I.e., si le système interne est consistant (¬□⊥), il ne peut pas prouver G (soit : ¬□G)… …donc G, qui équivaut à ¬□G, est vrai ! (c'est-à-dire, est un théorème du système externe, prouvé sous l'hypothèse (¬□⊥) que le système interne est consistant. C'est le premier théorème d'incomplétude.

Maintenant, en appliquant (A) à cette preuve (explicite !) de ¬□⊥⇒¬□G, on obtient □(¬□⊥⇒¬□G) donc □¬□⊥⇒□¬□G (par (C)). Comme ¬□GG donne □(¬□GG) par (A) donc □¬□G⇒□G par (C), les implications □¬□⊥⇒□¬□G, □¬□G⇒□G et □G⇒□⊥ mises bout à bout donnent finalement □¬□⊥⇒□⊥, ou encore ¬□⊥⇒¬□¬□⊥. C'est le second théorème d'incomplétude : si le système (interne) est consistant (¬□⊥) alors il ne prouve pas la consistance du système interne² (¬□¬□⊥). Et comme en fait tous ces systèmes sont le même, le postulat épistémologique évoqué ci-dessus permet de lire ce théorème formel ¬□⊥⇒¬□¬□⊥ sous la forme si Peano est consistant, il ne prouve pas sa propre consistance (idem pour ZFC).

Évidemment, l'ultra-formaliste dont j'ai parlé plus haut objectera et dira que j'ai juste prouvé un énoncé cabalistique ¬□⊥⇒¬□¬□⊥ sans aucun sens dans le monde réel et qui ne dit rien sur mon système externe (lequel vit dans le monde réel). Mais si on croit que les « vrais » entiers naturels ont un sens et que Peano en dit des choses vraies, on est forcé de conclure que Peano est incomplet et ne sait pas prouver certaines choses vraies (essentiellement, il ne sait pas qu'il dit lui-même la vérité).

↑Entry #2590 [older| permalink|newer] / ↑Entrée #2590 [précédente| permalien|suivante] ↑

↓Entry #2587 [older| permalink|newer] / ↓Entrée #2587 [précédente| permalien|suivante] ↓

(lundi)

Un joli problème paradoxal de théorie de l'information

(Je n'ai pas de poisson d'avril à proposer cette année, mais je vous donne deux entrées pour le prix d'une.)

Même s'il a déjà été signalé hier en commentaire à cette vieille entrée, je ne peux pas ne pas écrire une petite entrée sur ce magnifique problème qui continue à narguer mon intuition — il s'agit d'un de ces cas où les mathématiques font quelque chose qui devrait être très sérieusement impossible, et j'ai beau arriver à prouver (et à comprendre la preuve intellectuellement) que c'est possible, je reste incapable de me faire intuitivement à l'idée que ça l'est. (Je sais, je sais : In mathematics you don't understand things. You just get used to them.)

Le problème est très simple (mais je l'écris de façon un peu longue pour qu'il n'y ait aucune ambiguïté sur les règles du jeu) :

Le cruel Docteur No a capturé deux mathématiciens, que nous appellerons Alice et Bob. Après avoir permis à ceux-ci de se concerter sur leur stratégie, il va les soumettre à son épreuve dont il leur communique les termes : chacun des deux pourra observer une suite binaire infinie aléatoire uniformément distribuée (c'est-à-dire une suite de 0 et 1 dont chaque terme vaut 0 ou 1 avec probabilité ½, indépendamment les uns des autres ; on peut imaginer une suite de résultats de tirages de pile ou face), les deux suites (celle qu'Alice observe et celle que Bob observe) étant indépendantes. Pour fixer les idées, mettons que les termes de chaque suite sont numérotés par les entiers naturels (0, 1, 2, 3, etc.) : appelons (An) la suite observée par Alice et (Bn) la suite observée par Bob. Alice et Bob ne peuvent pas communiquer entre eux (une fois finie la concertation initiale sur leur stratégie commune, mais celle-ci est antérieure à l'observation des suites). Alice, après avoir observé sa suite choisit un entier naturel a qui sera le numéro d'un terme dans la suite de Bob ; de même, Bob, après avoir observé sa suite, choisit un entier naturel b qui sera le numéro d'un terme dans la suite d'Alice. Alice et Bob gagnent (un gentil petit cadeau de la part du Docteur No) si chacun a choisi un terme valant 1 dans la suite de l'autre, c'est-à-dire, si la valeur Ab du terme de la suite d'Alice numéroté par l'entier b choisi par Bob et la valeur Ba du terme de la suite de Bob numéroté par l'entier a choisi par Alice valent tous les deux 1.

Quelle stratégie Alice et Bob peuvent-ils employer pour maximiser leur chance de gain ?

(Formellement : une stratégie d'Alice est une fonction borélienne α:{0,1}→ℕ et une stratégie de Bob est une fonction borélienne β:{0,1}→ℕ. La probabilité de succès est la mesure de l'ensemble des couples (A,B) ∈ {0,1} × {0,1} tels que A(β(B)) = B(α(A)) = 1, pour la mesure de probabilité uniforme sur {0,1} × {0,1} (les valeurs α(A) et β(B) sont les entiers noté a et b). Et on demande de maximiser cette probabilité.)

Remarque : Si on est gêné par les suites infinies (et c'est vrai que c'est agaçant de parler de l'observation d'une suite infinie), on peut ramener le problème à niveau fini : soit N un entier, Alice verra le résultat de N tirages de pile ou face uniformes et indépendant, Bob verra le résultat de N autres tels tirages (indépendants entre eux et indépendants de ceux d'Alice), et chacun devra choisir un entier entre 0 inclus et N exclu faisant référence à un tirage de l'autre, les deux gagnant s'ils ont choisi un tirage valant 1 chez l'autre. La situation paradoxale décrite ci-dessous est la même pour N fini que pour des suites infinies, c'est juste que les nombres sont moins ronds. (Formellement, dans le cas fini, une stratégie d'Alice est une fonction α:{0,1}N→{0,…,N−1} et une stratégie de Bob est une fonction β:{0,1}N→{0,…,N−1}. La probabilité de succès est la mesure de l'ensemble des couples (A,B) ∈ {0,1}N × {0,1}N tels que A(β(B)) = B(α(A)) = 1, pour la mesure de probabilité uniforme sur {0,1}N × {0,1}N.)

Une stratégie évidente consiste à ce qu'Alice et Bob choisissent tous les deux l'entier 0 (faisant référence au premier terme de la suite de l'autre). Dans ce cas, ils gagnent avec probabilité ¼, puisque chacun de A₀ et de B₀ vaut 1 avec probabilité ½, indépendamment l'un de l'autre. Choisir d'autres entiers constants (par exemple si Alice choisit 42 et Bob choisit 1729) donne toujours exactement la même chose.

L'idée intuitive qu'on a spontanément (en tout cas que j'ai eue, et dont je n'arrive toujours pas vraiment à me défaire) est qu'on ne peut pas faire mieux que ¼ :

Raisonnement incorrect : Alice et Bob ne peuvent pas communiquer, n'ont aucune information sur la suite de l'autre, et leurs deux suites sont indépendantes, donc il est impossible que l'observation de sa propre suite puisse aider Alice à faire quoi que ce soit d'utile sur la suite de Bob. Donc il n'y a rien de mieux à faire que de choisir des a et b constants (dont la valeur n'a pas d'importance).

Raisonnement incorrect (variante) : Quelle que soit la manière dont Alice choisit a, la valeur Ba vaudra 0 avec probabilité ½ et 1 avec probabilité ½ (puisque le choix de a ne peut dépendre que de A, qui est indépendant de B), et de même Ab vaudra 0 avec probabilité ½ et 1 avec probabilité ½. Puisque les suites A et B sont indépendantes et que (du coup) les variables a et b le sont, on a Ab = Ba = 1 avec probabilité ¼, et on ne peut pas faire mieux.

Et pourtant, c'est faux.

Et ce n'est même pas très compliqué de faire mieux que 1/4. Voici une stratégie simple qui donne une probabilité 1/3 de succès à Alice et Bob : Alice choisit pour a l'indice du premier 1 dans sa propre suite, et Bob choisit de même pour b l'indice du premier 1 dans la sienne. La probabilité d'avoir a=b est la somme de 1/4 (probabilité d'avoir a=b=0) plus 1/4² (probabilité d'avoir a=b=1) plus 1/4³ (probabilité d'avoir a=b=2), etc., c'est-à-dire la somme des 1/4k, qui vaut 1/3 ; et lorsque c'est le cas, par construction, Ab = Ba = 1 ; par ailleurs, si ab, alors Alice et Bob perdent (par exemple, si a<b, on a Ba = 0 puisque b est l'indice du premier 1 dans la suite B). Donc la probabilité de succès de cette stratégie est exactement 1/3.

J'ai beau avoir écrit cette preuve. Je n'arrive vraiment pas à me faire une idée intuitive de comment il est possible que cette stratégie fonctionne.

Mais je peux quand même dire ceci : la raison pour laquelle les raisonnements ci-dessus (tendant à « prouver » l'impossibilité) sont incorrects, c'est que s'il est bien vrai que chacun de Ab et Ba vaut 0 ou 1 avec probabilité ½, ils ne sont pas indépendants (puisque a dépend de A et b de B), et plus exactement, Alice et Bob peuvent s'arranger (et c'est ce qu'ils font dans la stratégie ci-dessus) pour que les deux événements Ab = 1 et Ba = 1 soient corrélés. Autrement dit, si on ne peut pas améliorer la chance d'avoir Ab = 1, on peut au moins s'arranger pour que, lorsque c'est le cas, ceci apporte des informations sur a ou sur B qui font que Ba = 1 a plus de chances de se produire. Je continue à trouver ça peu clair intuitivement, mais c'est déjà ça.

Maintenant, ce qui est amusant (et presque un peu décevant ?), c'est que cette jolie stratégie donnant 1/3 n'est toujours pas optimale : comme il est expliqué sur le fil MathOverflow lié au début de cette entrée (dans la réponse de mihaild), on peut faire 7/20 (c'est-à-dire 35%). Mais on ne sait pas si c'est optimum, et on n'a pas (au moment où j'écris, d'après de fil de discussion) de borne supérieure autre que le ½ évident.

Référence croisée : ce fil Twitter.

Mise à jour () : La borne supérieure a été améliorée à 3/8 dans le fil MathOverflow avec un argument très simple (quand j'aurai le temps, j'essaierai de mettre à jour ce paragraphe pour le donner). Par ailleurs, il apparaît que problème était déjà discuté (de façon un peu généralisée) dans ce papier, qui prouve une borne supérieure de 3/8, et annonce mais sans preuve une borne supérieure de 81/224.

Complément () : Pour la complétude de cette entrée, je reproduis en la paraphrasant la preuve de la borne supérieure par 3/8 de la probabilité de succès. Si on note a l'entier choisi par Alice et a′ l'entier qu'elle choisirait avec la même stratégie si elle observait la suite (1−An) au lieu de (An) (i.e., si on échange les 0 et 1 dans ce qu'Alice observe), et de même b et b′ pour Bob, alors on peut remarquer que l'espérance E(AbBa) de AbBa (qui est la probabilité de succès p qu'on cherche à maximiser) est aussi égale à l'espérance de (1−Ab) Ba (puisque 1−A est une variable distribuée comme A et toujours indépendante de B) ou de Ab (1−Ba) ou encore de (1−Ab) (1−Ba). La somme de ces quatre espérances (qui est 4p) est donc l'espérance de (Ab+1−Ab) (Ba+1−Ba), soit 4pE((Ab+1−Ab) (Ba+1−Ba)) = 1 + E(AbAb) + E(BaBa) + E((AbAb) (BaBa)) soit encore 1 + E((AbAb) (BaBa)) puisque E(Ab) = E(Ab) et E(Ba) = E(Ba) (en fait, chacune de ces quatre espérances vaut ½). Enfin, comme AbAb vaut +1 ou −1, l'espérance E((AbAb) (BaBa)) est majorée par E(|BaBa|), elle-même majorée par ½ (si ij alors E(|BiBj|)=½). Au final, on a prouvé 4p≤1+½, soit p≤3/8 comme annoncé.

↑Entry #2587 [older| permalink|newer] / ↑Entrée #2587 [précédente| permalien|suivante] ↑

↓Entry #2578 [older| permalink|newer] / ↓Entrée #2578 [précédente| permalien|suivante] ↓

(dimanche)

Et maintenant, un peu de logique linéaire

Je traîne depuis longtemps l'idée de vulgariser quelques notions de logique linéaire. Du point de vue de la vulgarisation, la logique linéaire a ceci de sympathique que c'est quelque chose mathématiquement à tellement « bas niveau » que je n'ai besoin de présupposer aucune sorte de connaissance mathématique préalable pour en parler : en principe, on peut la considérer comme un pur petit jeu syntactique dont les règles ne sont pas très compliquées — même si, présenté sous cette forme, il risque de ne pas apparaître comme très intéressant, et même s'il est bon d'avoir du recul pour avoir une idée de quelles règles appliquer à quel moment, la compréhension des règles elles-mêmes ne nécessite pas de savoir particulier. Du point de vue personnel, la logique linéaire est quelque chose qui me frustre beaucoup parce que, d'un côté, je la trouve extrêmement élégante et joliment symétrique, de l'autre, à chaque fois qu'elle semble avoir une application ou une interprétation quelque part, on se rend compte qu'il y a une note en bas de page qui fait que ce n'est pas vraiment la logique linéaire (il y a par exemple un axiome en plus, ou un connecteur en moins, ou seulement un fragment du système, ou quelque autre variation), et l'élégance est rompue ; et aussi, pour cette raison, l'intuition qu'on peut se former est brouillée.

De quoi s'agit-il ? D'un système formel inventé par le logicien français Jean-Yves Girard en 1987. J'avoue ne guère avoir d'idée de ce qu'il voulait faire avec, parce que les textes de Girard sont… un peu inhabituels… bourrés de mots qu'il ne définit pas, de références cryptiques, et de blagues dont on se demande si ce sont des blagues (comme l'intervention insistante du brocoli dans beaucoup de ses papiers). Mais depuis, elle a trouvé diverses applications et connexions : en logique, en informatique théorique ou plus appliquée, en algèbre et théorie des catégories, en théorie des jeux et même en physique quantique (sauf qu'à chaque fois, comme je le dis ci-dessus, il y a quelque chose en plus ou en moins) ; mais je ne compte pas essayer de décrire ces applications et connexions, qui sont pourtant sans doute ce qu'il y a de plus intéressant dans l'histoire, parce que je n'ai pas l'espace ni le temps pour ça.

Bref. Avant d'expliquer quelles sont les règles du jeu, il faut que j'essaye de donner une idée de ce dont il s'agit (en agitant les mains). On parle de logique linéaire, et il s'agit effectivement d'une généralisation de la logique classique, mais ce terme risque de donner une impression tout à fait fausse, et on devrait peut-être plutôt s'imaginer que ça s'appelle formalisme d'échanges ou synallagologie universelle ou quelque chose de ce genre (le seul problème du mot synallagologie est que personne ne sait ce qu'il veut dire puisque je viens de l'inventer… mais à part ça, il est parfait). La différence essentielle est la suivante : en logique usuelle, si on fait un raisonnement tendant à démontrer une conclusion X à partir d'hypothèses A, B et C, disons, on peut utiliser librement A, B et C dans le cours du raisonnement, chacune aussi souvent qu'on veut (on peut aussi, d'ailleurs, ne pas du tout utiliser une hypothèse) ; la logique linéaire, pour sa part, exige que chacune des « hypothèses » (qu'il vaut mieux, du coup, ne pas considérer comme des hypothèses) soit utilisée une et une seule fois : on ne peut ni les multiplier ni les faire disparaître (évidemment, il y aura des moyens de marquer des hypothèses spéciales qu'on peut multiplier et/ou faire disparaître, mais ce n'est pas le cas par défaut) ; dans ces conditions, il vaut mieux, donc, considérer qu'on n'a pas du tout à faire à une logique, à des raisonnements et à des hypothèses et conclusions, mais à des échanges (gestion de ressources abstraites, transactions économiques, réactions chimiques, que sais-je encore) qui ont des entrées (réactifs) et des sorties (produits), ou quelque chose comme ça. Par exemple, la logique linéaire pourrait concevablement servir à formaliser des contrats financiers (j'avais déjà évoqué quelque chose de ce genre), mais il ne faut pas s'imaginer que la logique linéaire elle-même dira grand-chose d'intéressant : de même que la logique classique ne fournit que le langage le plus basique au-dessus duquel on peut bâtir des raisonnements (il faut ajouter des axiomes intéressants pour obtenir quelque chose d'intéressant), la logique linéaire n'est qu'un cadre, en lui-même extrêmement primitif pour possiblement décrire des échanges.

↑Entry #2578 [older| permalink|newer] / ↑Entrée #2578 [précédente| permalien|suivante] ↑

↓Entry #2568 [older| permalink|newer] / ↓Entrée #2568 [précédente| permalien|suivante] ↓

(jeudi)

Le retour du cruel Docteur No

Le Docteur No est de retour ! Il était plutôt occupé ces derniers temps à résoudre des problèmes informatiques, mais le voilà revenu et qui s'adonne à son passe-temps favori qui consiste à capturer des mathématiciens pour les soumettre à des énigmes idiotes (voir ici pour des épisodes précédents) :

Le cruel Docteur No a capturé 100 mathématiciens pour les soumettre à une épreuve démoniaque. Après avoir permis aux mathématiciens de se concerter initialement, il va placer sur la tête de chacun d'entre eux un chapeau portant un nombre entier entre 1 et 100 (inclus) de façon que chacun puisse voir le nombre porté par les chapeaux de tous les autres mais pas le sien. Les mathématiciens n'ont aucune information sur la manière dont les numéros seront attribués et il peut parfaitement y avoir des répétitions. Les mathématiciens n'auront plus le droit de communiquer à partir du moment où la distribution des chapeaux commence. Chacun devra émettre un avis sur le numéro qu'il pense que son propre chapeau porte : ces avis seront émis par pli secret et connus du seul Docteur No (i.e., les mathématiciens ne connaissent pas les réponses fournis les les autres). Le Docteur No est plutôt clément aujourd'hui : il libérera les mathématiciens si au moins l'un d'entre eux a fourni une réponse correcte (i.e., deviné le numéro que porte son chapeau) ; dans le cas contraire, il tuera tous les mathématiciens avec ses tortures particulièrement raffinées.

Les mathématiciens pourraient évidemment tous répondre au hasard (auquel cas ils auraient 63% de chances d'être libérés ; je laisse ça aussi en exercice mais ça n'a pas vraiment de rapport avec le problème). Mais en se concertant, ils peuvent s'arranger pour être certains d'être libérés : comment font-ils ?

La solution est simple, mais on peut perdre beaucoup de temps en cherchant dans la mauvaise direction. Je tire ça d'ici (la réponse est indiquée en rot13 dans un commentaire en-dessous) ; ce fil contient d'ailleurs un certain nombre d'autres devinettes rigolotes.

Ajout : voir ici, peut-être , et encore pour plus d'énigmes du Docteur No.

Sinon, voici un autre problème (pas vraiment une énigme), qui n'a absolument aucun rapport avec celui qui précède si ce n'est qu'il est venu à ma connaissance autour du même moment (il est inspiré de cette question mais c'est une variante assez différente du même genre d'idées) :

On considère n+1 objets et deux joueurs (Alice et Bob). Chacun des deux joueurs a un ordre de préférence (strict) sur les objets, et ces ordres de préférence sont connus de l'un comme de l'autre. Ils vont jouer au jeu suivant : chacun, tour à tour, va éliminer un objet, jusqu'à ce qu'il n'en reste plus qu'un (après n tours, donc). Ce dernier objet est gagné par les deux joueurs (i.e., ils se le partagent, ou si on préfère on peut dire qu'il y en a deux copies et que chacun en reçoit une, bref, chacun cherche à maximiser la valeur qu'il accorde à l'objet restant). Le jeu est à information parfaite (les deux joueurs savent tout : ce que l'autre joueur veut, et ce qu'il fait). Quelle stratégie vont-ils appliquer (en fonction des deux ordres de préférence) ? Et comment peut-on prédire efficacement l'objet final ?

On peut le formaliser plus précisément ainsi : soient 1,…,n les objets, triés dans l'ordre de préférence d'Alice (du moins préféré au plus préféré), et soient σ(1),…,σ(n) les valeurs de préférence de Bob pour les objets dans cet ordre, où σ est une permutation de {1,…,n} (c'est-à-dire qu'il aime le moins l'objet σ−1(1) et qu'il préfère σ−1(n)). Alice va jouer la stratégie qui cherche à maximiser la valeur i du dernier objet restant, tandis que Bob va jouer la stratégie qui cherche à maximiser σ(i) : on demande comment calculer i en fonction de σ et comment Alice doit calculer son premier coup. (On peut évidemment procéder de façon inductive : chaque coup possible d'Alice se ramène à un jeu de même nature avec un objet de moins et les rôles des joueurs échangés, mais ce que je demande c'est si on peut faire mieux ou plus simple.)

À titre d'exemple, si n=2 et que les préférences d'Alice sont 1<2<3, selon les valeurs (σ(1),σ(2),σ(3)) des préférences de Bob pour ces trois objets l'objet choisi est 3 (le préféré d'Alice) dans tous les cas sauf si (σ(1),σ(2),σ(3)) vaut (2,3,1) ou (3,2,1) (i.e., si l'objet préféré d'Alice est celui que Bob aime le moins), auquel cas l'objet choisi est 2 (le deuxième préféré d'Alice). C'est assez intuitif.

Il se peut que la réponse soit très facile : je n'ai pas pris le temps d'y réfléchir (trop occupé que j'étais à coudre des numéros sur des chapeaux).

On pourrait aussi demander ce qui se passe si l'un des joueurs joue la stratégie « gloutonne » (consistant à éliminer à chaque coup son objet le moins préféré), selon que l'autre joueur le sait ou selon que l'autre joueur croit toujours qu'il jouera désormais de façon rationnelle. On pourrait aussi jouer à changer l'alternance des coups entre Alice et Bob (plutôt que de les faire alterner mécaniquement) et chercher l'ordre le « plus équitable » dans un sens qu'il faudrait formaliser. Bon, bref, je trouve l'idée générale du jeu intéressante, mais je ne sais pas quelle est la bonne question à poser (c'est peut-être ça la question, en fait : trouver la question la plus intéressante à poser sur ce jeu).

↑Entry #2568 [older| permalink|newer] / ↑Entrée #2568 [précédente| permalien|suivante] ↑

↓Entry #2562 [older| permalink|newer] / ↓Entrée #2562 [précédente| permalien|suivante] ↓

(mercredi)

Sur la rédaction des maths et la recherche de l'inambiguïté

L'an dernier, j'ai eu l'honneur de déjeuner avec Jean-Pierre Serre, et nous avons discuté entre autres de la rédaction des mathématiques. (Comme Serre est à mon avis — et je suis loin d'être le seul à le penser — un des mathématiciens dont le style de rédaction est le plus parfait qui soit, c'était évidemment très intéressant pour moi d'entendre ce qu'il avait à dire. Je recommande d'ailleurs de regarder cet exposé où il dénonce beaucoup de mauvaises habitudes dans ce domaine.)

Il a beaucoup insisté sur l'importance d'écrire des énoncés justes : c'est-à-dire notamment, si un énoncé P(n) est vrai pour tout n≥1, de bien écrire pour tout n≥1 et de ne pas laisser le lecteur penser que P(0) puisse être vrai lorsqu'il ne l'est pas (et c'est encore pire quand l'énoncé commence à être vrai à 2 ou 3, voire au-delà). Je savais déjà qu'il accordait beaucoup d'importance à ça[#]. Mais comme je mentionnais les codes correcteurs d'erreurs, il a fait cette autre remarque que je trouve tout à fait digne d'être érigée en maxime, à savoir qu'il essayait d'écrire les mathématiques comme un code correcteur d'erreurs (je n'ai malheureusement pas noté la phrase exact qu'il a employée, mais ça fait peut-être justement partie du phénomène souligné). Ce qu'il voulait dire est qu'inévitablement, dans une rédaction mathématiques, il y aura des choses qui seront mal lues : soit que l'auteur lui-même fasse un lapsus, soit que le manuscrit soit mal retapé, soit que l'imprimeur change certains symboles, soit que le lecteur lise mal ou ait une convention différente sur certaines choses : il faut essayer d'écrire de manière à rendre le texte relativement robuste par rapport à ces erreurs (pour qu'elles soient détectables ou, encore mieux, corrigeables).

[#] Plusieurs fois j'ai assisté à un séminaire où Serre était dans l'assistance[#2], où l'orateur commence énonce un théorème et où Serre s'exclame mais c'est complètement faux ! ce n'est pas possible, ça ! — alors là, l'orateur, visiblement paniqué, se demande si Serre vient de trouver en direct un contre-exemple au théorème principal, et au bout d'un moment de confusion on comprend que Serre protestait contre le fait que l'énoncé était trivialement faux pour n=0. Moment sans doute très désagréable pour l'orateur, mais je pense qu'après ça on apprend très vite à se demander si pour tout n veut vraiment dire tout n.

[#2] Tiens, puisque j'en suis à raconter des anecdotes à son sujet[#3], un jour j'ai assisté à un séminaire où l'orateur a commencé à parler du groupe de Serre comme si tout le monde savait évidemment de quoi il s'agissait (je sais que c'était dans un contexte de représentations galoisiennes, mais moi-même je n'avais aucune idée de ce que c'était censé être). L'éponyme a levé la main pour demander qu'est-ce que le groupe de Serre ?. La morale, là, et je pense aussi que l'orateur l'aura bien retenue, c'est que même quand on parle à une assistance de gens très distingués, il faut être très conservateur dans ce qu'on suppose que tout le monde connaît.

[#3] Allez, une troisième pour la route. Quand j'ai écrit cet article avec mon directeur de thèse, ce dernier l'a envoyé à Serre pour lui demander son avis avant publication. Entre autres remarques, il a relevé le bout de phrase par récurrence sur le naturel k et a commenté ce n'est sûrement pas vous [Colliot-Thélène] qui avez écrit ça : de fait, c'est moi qui l'avais rédigé ce passage. (L'objection est que Serre n'aime pas qu'on écrive un naturel pour un entier naturel. Je vous rassure, ses autres remarques sur l'article étaient beaucoup plus intéressantes.) Colliot-Thélène a regardé dans le petit Robert, qui recense bien quelque part naturel comme nom masculin dans le sens de entier naturel, et nous avons décidé de laisser la phrase comme ça. Mais depuis, je fais plus attention à écrire généralement un entier naturel plutôt que juste un naturel (sauf quand j'ai l'impression que le second allège vraiment la phrase).

↑Entry #2562 [older| permalink|newer] / ↑Entrée #2562 [précédente| permalien|suivante] ↑

↓Entry #2557 [older| permalink|newer] / ↓Entrée #2557 [précédente| permalien|suivante] ↓

(dimanche)

Une méditation sur le nombre 24 et la causalité en mathématiques

Dans cette entrée, je vais commencer par parler de maths, mais ensuite je veux me servir de ce que j'aurai raconté pour soulever une question de philosophie (ou peut-être, de psychologie) des maths. Ces deux parties n'ont pas vraiment de rapport sauf que la première sert d'illustration pour la seconde : on doit pouvoir sauter la première partie (ou la lire en diagonale) et quand même comprendre quelque chose à la seconde, enfin, j'espère. (Mais bon, je ne suis pas content de ce que j'ai écrit dans la seconde partie, donc ça n'a peut-être pas d'intérêt.)

*

Je racontais récemment que le nombre 24 était particulièrement magique à cause de l'existence de certains objets exceptionnels, notamment le réseau de Leech en dimension 24 (défini dans l'entrée en question). Maintenant, considérons le fait suivant (problème des boulets de canon, conjecturé par Édouard Lucas autour de 1875 et démontré par George Watson en 1918) :

L'équation 0² + 1² + ⋯ + n² = m² a exactement trois solutions, à savoir quand (n,m) vaut (0,0), (1,1) ou (24,70). Autrement dit, à part les deux cas triviaux (0²=0² et 0²+1²=1²), la seule situation où la somme des carrés des premiers entiers naturels est encore un carré est donnée par 0² + 1² + ⋯ + 24² = 70².

(La somme 0²+1²+⋯+n² vaut encore n·(n+1)·(2n+1)/6, mais si on écrit l'équation comme n·(n+1)·(2n+1) = 6m², on ne voit pas vraiment pourquoi elle est intéressante.)

Ce n'est pas très facile à montrer, mais ce n'est pas ça qui m'intéresse.

On pourrait dire que le fait que la somme des carrés des entiers naturels jusqu'à 24 est un carré (et qu'à part les cas triviaux c'est le seul) est une propriété remarquable du nombre 24. Pas franchement passionnante, mais bon. Mais a priori, on se dit que cette propriété n'a aucun rapport particulier avec les propriétés magiques du nombre 24 que j'ai évoquées dans mon autre entrée.

Sauf qu'en fait, si.

↑Entry #2557 [older| permalink|newer] / ↑Entrée #2557 [précédente| permalien|suivante] ↑

↓Entry #2555 [older| permalink|newer] / ↓Entrée #2555 [précédente| permalien|suivante] ↓

(jeudi)

Les trois magiciens du nombre 24 : le code de Golay, le réseau de Leech et le module de Moonshine

S'il y a un nombre magique en mathématiques, c'est bien 24. (Je pense que Douglas Adams a juste inversé les chiffres.) Le nombre 8 vient presque à égalité, et 12, peut-être 6 et 16 ont aussi quelques propriétés magiques (qui, globalement, sont toujours liées à celles de 24), mais celui qui est vraiment farabuleux (pardonnez le néologisme), c'est 24.

Je voudrais dans cette entrée essayer de témoigner de la magie de 24 en définissant deux et en évoquant le troisième de trois objets exceptionnels qui font que 24 est si spécial. On pourrait aussi les appeler les trois générations de « magiciens » qui tirent leur pouvoir magique du nombre 24. Ces objets sont : le code de Golay binaire (première génération), le réseau de Leech (deuxième génération), et le module de Moonshine (troisième génération). Mon but est donc d'en parler un peu, en définissant proprement les deux premières générations, en essayant que ce que je dis sur la première soit accessible à un très large public, et en disant quelques mots de la troisième. Ou du moins, mon but était tout ça, parce que je me suis pas mal embourbé et je ne suis pas du tout content de ce que j'ai écrit : je donne certes une définition du code de Golay binaire et du réseau de Leech, mais je crois ne pas avoir du tout réussi à passer l'idée de pourquoi ils sont intéressants au fond. Et comme souvent, je crois que je me retrouve à présupposer de mon lecteur un niveau de connaissances mathématiques préalables qui varie de façon assez incohérente d'un endroit à l'autre (au début je m'efforce vraiment de ne rien supposer, et à la fin, il sera certainement nécessaire d'avoir au moins une intuition de ce qu'est un groupe). Néanmoins, maintenant que tout ça est écrit, je ne vais pas ne pas le publier, donc prenez-le pour ce que ça vaut.

Comme par ailleurs, le nombre 8 est aussi magique (quoiqu'un peu moins que 24), je peux aussi parler de deux des trois[#] générations de magiciens qui tirent leur pouvoir magique de celui-ci : le code de Hamming de longueur 8 et le réseau E₈, parce qu'ils sont utiles pour approcher leurs analogues du nombre 24.

[#] Je crois que le troisième qui complète la série serait l'algèbre d'opérateurs de sommets dont Griess parle dans son article A vertex operator algebra related to E₈ with automorphism group O⁺(10,2), mais je ne comprends décidément pas bien tout ça.

Bref, le tableau à garder en tête (juste pour le plan : je vais expliquer ce que tout ça veut dire) est quelque chose comme :

Nombre magique1re génération2e génération3e génération
24Code de Golay binaireRéseau de LeechModule de Moonshine
8Code de Hamming de longueur 8Réseau E₈[Voir note #]

Le terme de génération évoque l'idée que les objets de la deuxième génération se définissent en termes de ceux de la première, et ceux de la troisième en termes de ceux de la deuxième, et qui plus est, il y a une certaine similarité entre la manière dont ces objets s'enfantent les uns les autres (je ne prétends pas que c'est rigoureusement la même, ni entre les colonnes, ni entre les lignes : notemment, il n'y a pas de « foncteur » dans l'affaire, juste une certaine analogie).

Je vais aussi évoquer, à chaque fois, les groupes de symétrie de ces différents objets, qui ressembleront à la numérologie suivante (là aussi, je dois expliquer ce que sont ces machins, mais à chaque fois, je donne le nom du groupe de symétrie et son ordre, c'est-à-dire le nombre de symétries) :

Nombre magique1re génération2e génération3e génération
24
M24
244 823 040
Co₀
8 315 553 613 086 720 000
Monstre (F₁)
808 017 424 794 512 875 886 459 904 961 710 757 005 754 368 000 000 000
8
C₂³⋊PSL(3,2)
1 344
W(E₈)
696 729 600
O(10,2,+) [???]
46 998 591 897 600

Plan de la suite :

↑Entry #2555 [older| permalink|newer] / ↑Entrée #2555 [précédente| permalien|suivante] ↑

↓Entry #2551 [older| permalink|newer] / ↓Entrée #2551 [précédente| permalien|suivante] ↓

(jeudi)

Le corps à un élément, et autres licornes mathématiques

Les chasseurs-prouveurs se rassemblaient comme chaque soir autour de l'équation de la chaleur et se racontaient les histoires de leurs aventures. Joueur-Atlas, qui était célèbre pour avoir autrefois attrapé un groupe parfait à 8 315 553 613 086 720 000 éléments évoqua le fils de « son » groupe, dont il avait aperçu la silhouette monstrueuse, à la lumière de la lune, en train de remuer près du nombre 196 883, et qu'il espérait voir un jour capturé. Mais ce soir, c'était au tour du vieux Bâtisseur-Alternatif de prendre la parole.

— Un jour, j'ai vu un corps comme je n'en avais jamais vu auparavant.

Il désigna une figure rupestre qu'il avait exécutée il y a longtemps, à la craie sur le tableau noir du Hilbertraum : un F pas tout à fait gras finissant par un 1 plutôt bas. Et il conclut théâtralement :

— Figurez-vous que ce corps n'avait qu'un seul élément.

Certains soupiraient d'entendre Bâtisseur-Atlernatif raconter toujours la même histoire à dormir debout, mais les jeunes chasseurs-prouveurs étaient fascinés :

— Un corps à un seul élément ? Mais ce n'est pas possible, grand-père !

— Pourtant je l'ai bien vu. Et attendez, ce n'est pas le plus incroyable… il était… sous l'anneau des entiers !

Cette révélation fit place à un silence choqué de la part de ceux qui n'avaient pas encore entendu cette légende. Un corps caché sous l'anneau des entiers ! Cela semblait si impossible — et en même temps si prometteur !

Bon, trêve d'humour à 1/1728 zorkmids.

Ce que j'appelle licorne mathématique, c'est un objet mathématique dont on aimerait croire à l'existence, un objet dont on a une certaine intuition et même des indices suggérant sa présence, qui, naïvement envisagé tel quel, n'existe pas, n'est pas possible, conduit à des paradoxes et des contradictions. On peut démontrer qu'il n'existe pas, que les propriétés qu'on lui attribue sont impossibles, et pourtant, on cherche quand même un moyen de le faire exister.

Ce qui fait que les licornes sont des licornes, c'est qu'on n'a pas trouvé la bonne définition ou la bonne théorie-cadre. Chasser la licorne, c'est donc chasser la définition ou la théorie qui lui permettra d'exister et de faire disparaître les paradoxes. Cela peut sembler bizarre : si on s'imagine qu'on donne naissance à un objet mathématique en le définissant, comment peut-il y avoir des objets qu'on poursuive sans parvenir à les définir ? Pourtant, cela se produit assez souvent (et je prends même ça pour un indice — certes pas terriblement concluant — dans le sens que les mathématiques existent indépendamment de l'homme).

*

L'exemple le plus simple est sans doute celui des nombres complexes. La manière dont je vais l'évoquer prend des libertés avec l'Histoire, qu'on m'en pardonne, mais mon but n'est past de raconter l'histoire des maths mais d'expliquer le concept d'une licorne. La racine carrée de −1, donc, était une licorne : un nombre qui, multiplié par lui-même, donne −1, c'est impossible a priori. Et on a une preuve de cette impossibilité : à savoir, que x soit positif ou négatif, son carré x² = x·x est forcément positif, donc ne peut jamais valoir −1. Bref, √(−1) est une licorne. Pourtant, quelqu'un prétend avoir vu des traces de la licorne : si on fait comme si elle existait, si on oublie cette impossibilité, si on mène les calculs comme si la racine carrée des nombres négatifs avait un sens, on arrive à résoudre des équations du troisième degré qu'on ne savait pas résoudre autrement (celles qui ont trois racines). Comment expliquer que quelque chose d'impossible conduise à une conclusion heureuse ? C'est cela qui fait soupçonner que la licorne existe vraiment, et qui donne envie de la capturer.

Maintenant on ne voit plus du tout que cette histoire a été une licorne : maintenant, √(−1) est un nombre complexe, quelque chose de tellement banal qu'on en oublie trop facilement que cela a pu représenter un paradoxe, une licorne. Pourtant, pour capturer cette licorne, il a fallu faire un saut conceptuel : abandonner l'idée que les nombres soient ordonnés, c'est un saut conceptuel gigantesque (les nombres ont été faits pour être ordonnés, pourrait-on dire ; les opérations algébriques sont une sophistication ajoutée sur le concept de comparaison). Mais une fois fait le saut conceptuel, une fois définie la notion de nombre complexe, la licorne est capturée, elle perd tout son mystère, on s'aperçoit que la définition antérieure de nombre était restrictive (ce qui ne signifie pas qu'elle n'ait pas de valeur !, il n'est pas question de remplacer systématiquement les nombres réels par des nombres complexes en mathématiques ou ailleurs).

Ce qui m'intéresse dans cette histoire, c'est la démarche où d'abord on aperçoit des traces de pas qui semblent paradoxales (cette bestiole marche comme un cheval, pourtant elle semble avoir une corne !), on traque le concept, et on finit par capturer la licorne, c'est-à-dire résoudre le paradoxe, rendre possible ce qu'on avait démontré impossible, en contournant l'impossibilité par une définition élargie. La licorne se capture par la définition. C'est inhabituel par rapport à la pratique générale des mathématiques qui consiste à chasser les preuves, pas les définitions (ni les licornes).

Méta : Dans la suite, je vais évoquer quelques autres licornes. Ne sachant pas à quel niveau de vulgarisation me placer, je n'ai pas vraiment pris de décision cohérente à ce sujet, et je suppose donc de la part de mon lecteur des connaissances variables de paragraphe en paragraphe : j'espère néanmoins avoir fait en sorte qu'on puisse comprendre un petit peu l'idée générale même si on ne comprend pas tel ou tel passage. D'autre part, comme mon but était de raconter une histoire plus que d'exposer des maths, il se peut que je dise des choses un peu abusées ici ou là (j'espère quand même avoir toujours été assez vague pour qu'on ne puisse pas m'accuser d'avoir écrit un énoncé indiscutablement faux, mais si c'est le cas, je mettrai la faute sur les licornes qui m'ont poussé).

↑Entry #2551 [older| permalink|newer] / ↑Entrée #2551 [précédente| permalien|suivante] ↑

↓Entry #2549 [older| permalink|newer] / ↓Entrée #2549 [précédente| permalien|suivante] ↓

(samedi)

Quelques conseils pour les étudiants en maths

À l'approche de la rentrée, je me dis qu'il peut être utile que je publie quelques conseils pour les étudiants en maths. Ceux-ci sont inspirés à la fois de ce que j'ai écrit dans ce fil Twitter et de ce que j'ai expliqué de vive voix à un élève de prépa qui me demandait de tels conseils : ayant ainsi un peu réfléchi à ce que j'avais à dire, autant le mettre sur ce blog.

Il s'agit là de conseils généraux (et sans doute d'une bonne dose de proverbial enfonçage de portes ouvertes à ma fidèle hache bénie +2 trempée dans la potion de banalités), s'adressant plutôt à des étudiants entre approximativement ce qui correspond, dans le système éducatif français, aux niveaux bac à bac+5 (disons) : grosso modo, avant ça, on ne fait pas tellement de maths au sens « raisonnement déductif » (ayant la démonstration comme méthode essentielle) ; et après, si vous en êtes arrivé là, vous avez assez de familiarité avec les mathématiques pour ne pas avoir besoin de mes conseils. Certaines des choses que je vais dire s'appliquent à d'autres disciplines adjacentes, comme la physique ou l'informatique (pour ce qui est de l'informatique théorique, mon avis est qu'il s'agit de toute façon d'une branche des mathématiques, même si elle ne s'assume pas toujours comme telle) ; quelques uns s'appliquent sans doute à n'importe quelle discipline, mais je me focalise quand même sur les maths.

On doit pouvoir tirer de ces conseils aux étudiants quelques conseils pour les enseignants (en appliquant la dualité étudiant-enseignant et le foncteur de réduction des platitudes), mais comme je n'aime pas donner des leçons à ce sujet, je vais laisser ça en exercice au lecteur.

✱ Conseil nº1 : aimer ce que l'on fait. C'est peut-être un peu idiot de dire ça, mais je suis persuadé qu'on ne peut correctement faire des maths que si on les trouve un minimum belles et intéressantes. Si on les conçoit comme une corvée, elles le resteront. Si on les conçoit comme (la métaphore que j'aime bien utiliser) l'exploration d'un palais magnifique et incompréhensiblement gigantesque, à la structure à la fois labyrinthique et élégante, on peut arriver à comprendre que ce soit à la fois excitant et séduisant, et en tirer la motivation nécessaire à leur étude.

Je ne peux évidemment pas donner de recette magique pour comprendre que les maths sont belles. C'est quelque chose que j'essaie de communiquer, mais il est évident que je ne vais pas transformer tout le monde en matheux. Mais, même si on a un a priori négatif (et certaines formes d'enseignement des mathématiques laissent hélas place à bien peu d'autre que la corvée rébarbative), il est au moins essentiel de garder l'esprit ouvert à cette possibilité, que les maths puissent être fascinantes. Je pense qu'il est au moins utile, même si on est réfractaire, de chercher les sous-domaines sur lesquels on accroche un peu plus, et de peut-être chercher à se renseigner sur l'allure générale du paysage mathématique, méditer sur la question de pourquoi certaines personnes y trouvent goût (est-ce qu'on a reçu une image déformée par un enseignement rébarbatif ou est-ce qu'on est véritablement hostile aux mathématiques ? dans ce dernier cas, il vaut certainement mieux arrêter de les étudier le plus rapidement possible et ne pas céder aux sirènes qui promettent une meilleure carrière ou quelque chose de ce genre). L'histoire des sciences peut aussi être une passerelle vers un intérêt pour les mathématiques elles-mêmes.

✱ Conseil nº1b : faire preuve de curiosité intellectuelle, et questionner ce que l'on fait. Apprendre le cours pour le cours est la meilleure garantie d'en rester là. Pour comprendre un cours de maths, il faut plutôt le questionner[#], le décortiquer, essayer de prendre du recul. Pour ça, le mieux est de garder à l'esprit toutes sortes de questions (pourquoi fait-on ça ?, où veut-on en venir ?, comment fonctionne cet objet ?) ; je vais donner des exemples plus précis de telles questions (à se poser à soi-même ou à poser à l'enseignant) dans les conseils suivants, mais le message plus général est que tout questionnement est bienvenu (voir aussi les conseils nº6 et 6b ci-dessous).

[#] Dans un cours de langue, si un étudiant demande pourquoi 95 en français de France se dit-il quatre-vingt-quinze ?, on ne peut pas vraiment lui donner de réponse sauf des choses comme c'est comme ça ou c'est un accident historique, peut-être accompagnées d'une histoire du phénomène (mais c'est déjà empiéter des langues sur la linguistique, et ça n'aidera pas tellement à l'apprentissage du français). L'enseignant en maths, lui, doit être prêt à se justifier de plus près que ça.

↑Entry #2549 [older| permalink|newer] / ↑Entrée #2549 [précédente| permalien|suivante] ↑

↓Entry #2548 [older| permalink|newer] / ↓Entrée #2548 [précédente| permalien|suivante] ↓

(jeudi)

Des figures que j'en ai marre de refaire, et des histoires de kaléidoscopes

[Dessins des systèmes de racines de rang 2]Il y a des des figures que je me retrouve à refaire encore et toujours, à chaque fois que je veux réfléchir à un certain sujet. Parmi ceux que je reproduis avec une fréquence qui finit par devenir vraiment pénible, il y a ceux qui apparaissent ci-contre à droite, et que je me suis enfin de sorti les doigts du c** pour produire en PDF avec TikZ (suivez le lien pour le PDF). Comme je ne suis certainement pas le seul trouver ces figures utiles pour réfléchir, je les mets en ligne. Et du coup, je peux en profiter pour faire un peu de vulgarisation sur ce qu'ils représentent.

Je vais essayer d'expliquer ça sous l'angle de la géométrie euclidienne élémentaire, à travers la question de classifier et de comprendre les kaléidoscopes (simpliciaux). L'intérêt, outre que c'est peut-être plus parlant, est ne pas supposer que qui que ce soit ait lu mon récent rant interminable sur les groupes de Lie (mais en même temps, essayer de dire les choses de manière à quand même éclairer le rant en question). En fait, après coup, je ne suis rendu compte que ce n'était pas forcément une très bonne approche, et que cette entrée ressemble beaucoup à une accumulation de faits qui partent dans tous les sens et qui ne reflètent pas bien (pun unintended) l'élégance du sujet. En plus de ça, comme c'est un sujet que j'ai l'habitude de voir abordé autrement que comme de la géométrie euclidienne, je ne suis pas très sûr de l'ordre dans lequel les faits s'agencent logiquement, et je n'ai pas toujours une idée très claire de la difficulté qu'il y aurait à les démontrer dans une telle approche. Et aussi à cause de ça, il faut que j'avertisse que je n'ai pas vérifié très soigneusement (je veux dire, encore moins que d'habitude…) tous les résultats que j'énonce dans cette entrée, et qu'il est fort possible que j'aie oublié une hypothèse ou une autre pour me raccrocher à là où je veux en venir ; notamment, j'ai failli complètement négliger la « condition supplémentaire » que j'ai finalement trouvé utile d'introduire plus bas dans la définition d'un kaléidoscope. Malgré tout ça, j'espère que ce que je raconte est au moins un peu intéressant.

↑Entry #2548 [older| permalink|newer] / ↑Entrée #2548 [précédente| permalien|suivante] ↑

↓Entry #2546 [older| permalink|newer] / ↓Entrée #2546 [précédente| permalien|suivante] ↓

(mercredi)

Quelques points de vue (de matheux) sur les grandeurs physiques et unités de mesure

Dans cette entrée, je voudrais évoquer la question des grandeurs physiques (longueur, durée, vitesse, masse, courant électrique…) et des unités de ces grandeurs. Je vais jeter un regard de matheux sur ce que ces choses sont, proposer quelques points de vue ou (esquisses de) définitions formelles possibles, et m'interroger sur l'utilité et la pertinence de ces points de vue, notamment pédagogiques, mais aussi du point de vue de la question de l'incertitude des mesures.

Je précise que cette entrée part un peu dans tous les sens, parce que j'ai commencé par écrire de la façon dont les idées me venaient (ou me revenaient, parce que ce sont des idées que je rumine depuis longtemps), et j'ai voulu raconter trop de choses à la fois, donc il y a plein de digressions. En plus de ça, j'ai un peu permuté les bouts que j'avais écrits (il en reste certainement des incohérences comme des je vais y revenir alors que les choses sont dans un autre ordre), puis repermuté, puis re-repermuté au fur et à mesure que j'ajoutais des digressions, et finalement je ne sais plus du tout dans quel ordre je dis les choses. Heureusement, il n'y a pas trop de lien logique clair ni de dépendance entre les différents morceaux ce que je raconte, donc on doit pouvoir lire cette entrée dans le désordre puisque c'est comme ça qu'elle a été écrite ! J'ai essayé de marquer par des triples accolades {{{…}}} (cf. ici) les digressions les plus identifiables, dans l'espoir que ça aide à s'y retrouver un peu.

À l'origine je voulais parler de la manière dont un mathématicien peut définir ce que sont les grandeurs physiques et leurs unités. Mais je n'ai pas résisté à parler d'autres choses, à faire un tableau de plein de grandeurs (ci-dessous) et à entrer dans des discussions sur ce que sont les grandeurs dans la pratique, sur les incertitudes et les échelles de masse. J'ai commencé à écrire des choses sur la réforme du SI qui doit avoir lieu d'ici quelques mois, puis je me suis dit que non, ça faisait vraiment trop, mais il en reste quand même des bouts… (Je garde donc pour une entrée ultérieure les explications précises sur la réforme du SI, même si j'y fais allusion à diverses reprises ici.) Bref, voilà pourquoi cette entrée est encore plus désordonnée que d'habitude. J'espère qu'il y a quand même des choses à en tirer !

Pour essayer de fixer la terminologie, j'appellerai grandeur (plutôt que dimension qui peut causer confusion) quelque chose comme « la masse » de façon abstraite ; et j'appellerai quantité [de cette grandeur] une masse particulière (par exemple 70kg), mesurée, donc, dans une unité. Si on veut parler comme un informaticien, donc, la grandeur sera, pour moi, le type (« la masse »), tandis que la quantité sera l'instance de ce type (70kg). Et l'unité est une quantité particulière (de la grandeur) qu'on a choisie pour exprimer toutes les autres. Comme n'importe quelle quantité non nulle (disons peut-être strictement positive) peut servir d'unité, la différence entre « quantité » et « unité » est juste une question de regard qu'on porte dessus.

Je ne sais pas si ce choix terminologique était le meilleur, je conviens que c'est un peu contre-intuitif de dire que la grandeur de [la quantité] 70kg est la masse, mais je ne suis pas certain qu'il existe de choix vraiment bon (et puis, maintenant que c'est fait, je n'ai plus envie de tout rééditer). J'ai essayé de m'y tenir systématiquement, de toujours utiliser le mot grandeur pour le type et quantité pour la valeur dans le type, mais je ne peux pas exclure quelques lapsus occasionnels.

Ajout () : En fait, je ne distingue pas vraiment la grandeur et la dimensionnalité de cette grandeur (définie formellement ci-dessous), par exemple je ne distingue pas les grandeurs « énergie » et « moment d'une force » (tous les deux ayant l'unité SI de kg·m²/s², même si dans un cas on l'appelle plutôt le joule et dans un autre cas plutôt le newton·mètre, la distinction est plus mnémotechnique que fondamentale) ; de même, pour moi, le watt et le volt·ampère sont bien la même chose, nonobstant le fait qu'on ne les utilise pas exactement de la même manière ; je vais faire occasionnellement allusion à ce problème.

Bref, qu'est-ce que c'est que toute cette histoire ?

Pour commencer, une des propriétés des grandeurs et des unités est qu'on peut les multiplier et les inverser (donc, les diviser) ; alors qu'on ne peut ajouter ou soustraire que des quantités de même grandeur, mais ça j'y reviendrai plus loin. Par exemple, une unité de longueur divisée par une unité de durée (=temps) donne une unité de vitesse (mètre par seconde, kilomètre par heure) : et il s'agit bien d'une division des quantités correspondantes (1km=1000m, 1h=3600s donc 1km/h = 1000m/3600s = (1000/3600)m/s = 0.2777…m/s). On peut dire que, indépendamment des unités, la grandeur « vitesse » est le quotient de la grandeur « longueur » par la grandeur « durée ». De même, la grandeur « surface » est le carré de la grandeur « longueur » (son produit par elle-même). Et la grandeur « fréquence » est l'inverse de la grandeur « durée » (l'unité SI de fréquence, le hertz, est l'inverse de l'unité SI de temps, la seconde).

↑Entry #2546 [older| permalink|newer] / ↑Entrée #2546 [précédente| permalien|suivante] ↑

↓Entry #2537 [older| permalink|newer] / ↓Entrée #2537 [précédente| permalien|suivante] ↓

(dimanche)

Un problème d'algorithmique (en lien secret avec la formule de Weyl)

Méta : Régulièrement je tombe sur des problèmes mathématiques qui me paraissent tellement simples, tellement naturels et/ou tellement évidents (je veux dire évidents à poser, pas forcément évidents à résoudre !) que c'est inconcevable qu'il n'existe pas déjà une littérature abondante à leur sujet. Mais faute de connaître les bons mots-clés ou la bonne façon de formuler le problème (car souvent un même problème admet mille et une reformulations ou réinterprétations), je peux galérer pour mettre le doigt sur cette littérature. C'est extrêmement frustrant. Pour digresser sur ce problème en général, cf. par exemple cette vidéo où le YouTubeur Tom Scott passe la moitié du temps à raconter combien il a eu du mal à trouver le terme Inogon light pour en savoir plus sur un type de signal nautique utilisant intelligemment des effets de moiré pour montrer aux bateaux où aller en fonction de leur position. L'Internet a quelque chose de la Kabbale : quand on connaît le Vrai Nom de quelque chose, on acquiert du pouvoir sur cette chose — en l'occurrence, le pouvoir d'en savoir plus. Le problème que je veux évoquer ici fait partie de ces problèmes qui me semblent tellement « s'imposer » que je suis sûr qu'il a un nom et qu'il y a des chapitres entiers de bouquins d'algorithmiques qui lui sont consacrés ; mais comme je ne le formule pas forcément sous le bon angle, je ne trouve pas.

Il s'agit, donc, de quelque chose que je comprends raisonnablement bien du côté mathématique, mais dont l'algorithmique me laisse passablement perplexe. Ce qui veut dire que j'ai beaucoup de choses à raconter, dont beaucoup ne sont sans doute pas pertinentes pour le problème algorithmique, mais je ne sais pas au juste ce qui l'est et ce qui ne l'est pas.

Voici la première variante du problème algorithmique, qui est la plus simple et élémentaire à énoncer : je vais l'appeler la variante (AS), parce que je vais vouloir en formuler un certain nombre, ce sera plus commode si je leur donne des noms. (Le S signifie symétrique ; le A est là comme dans la classification de Killing-Cartan, mais pour l'instant peu importe.)

(AS) On se donne x et y deux vecteurs (de longueur, disons, n≥1), à coordonnées entières. Je suppose que la somme des coordonnées de x est nulle, et pareil pour y (je ne sais pas si ça sert vraiment à quelque chose).

Problème : trouver tous les produits scalaires possibles σ(xy entre y et un vecteur σ(x) obtenu en permutant les coordonnées de x, avec, pour chacun, son nombre d'occurrences, c'est-à-dire le nombre de permutations σ des coordonnées de x qui conduisent à ce produit scalaire.

Exemple : si x=(−2,−1,0,1,2) et y=(−2,0,0,1,1), la réponse attendue est {−7: 4 fois, −6: 4 fois, −5: 12 fois, −4: 8 fois, −3: 12 fois, −2: 4 fois, −1: 8 fois, 0: 16 fois, 1: 8 fois, 2: 4 fois, 3: 12 fois, 4: 8 fois, 5: 12 fois, 6: 4 fois, 7: 4 fois} (chaque produit scalaire possible σ(xy étant suivi de son nombre d'occurrences : notamment, il y a 16 permutations des coordonnées de x qui donnent un produit scalaire nul avec y). • Autre exemple : si x=y=(−2,−1,0,1,2), la réponse attendue est {−10: 1 fois, −9: 4 fois, −8: 3 fois, −7: 6 fois, −6: 7 fois, −5: 6 fois, −4: 4 fois, −3: 10 fois, −2: 6 fois, −1: 10 fois, 0: 6 fois, 1: 10 fois, 2: 6 fois, 3: 10 fois, 4: 4 fois, 5: 6 fois, 6: 7 fois, 7: 6 fois, 8: 3 fois, 9: 4 fois, 10: 1 fois}.

Il y a évidemment plein de façons de reformuler ça et plein de remarques évidentes à faire. Par exemple, je peux dire qu'il s'agit de considérer toutes les façons d'apparier (bijectivement) les coordonnées de x avec celles de y et de sommer les produits des coordonnées appariées entre elles : sous cette forme, il est évident que le résultat est symétrique entre x et y ; par ailleurs, il est clair que ça ne change rien de permuter les coordonnées de x ou celles de y, donc on peut les supposer triées au départ. Si on veut, je me donne deux paquets (deux « multiensembles ») x et y de nombres, de même taille, mais sans ordre, et je cherche toutes les façons de faire un produit scalaire.

↑Entry #2537 [older| permalink|newer] / ↑Entrée #2537 [précédente| permalien|suivante] ↑

↓Entry #2532 [older| permalink|newer] / ↓Entrée #2532 [précédente| permalien|suivante] ↓

(mercredi)

Petite animation (merdique) d'ondes sur un tore plat

En lien avec l'entrée précédente (que personne n'a lue mais c'est normal), j'ai produit ce petit gadget JavaScript qui (s'il n'est pas complètement cassé) représente une animation de l'équation des ondes sur un tore plat, en l'occurrence le tore plat E/L quotient du plan euclidien E=ℝ² par un réseau L triangulaire équilatéral (i.e., la fonction est périodique par L), à partir d'une condition initiale gaussienne assez piquée (censée donnée une idée d'approximation d'une distribution δ). Si on préfère, cela revient à faire l'équation des ondes dans le plan à partir d'une condition initiale qui est la somme d'une gaussienne centrée sur chaque point de L. Concrètement, il s'agit juste de calculer (la fonction du temps t et du point xE/L) :

αL* cα exp ( 2 i π (αx) ) cos ( 2 π |α| t ) cα = exp ( |α|2 / U2 )

— soit, en plus moche pour les navigateurs cassés qui ne gèrent pas le MathML —

αL* cα·exp(2iπ(α·x))·cos(2π|αt) cα = exp(−|α|²/U²)

U est un paramètre d'étroitesse de la condition initiale, et, histoire de faire le lien avec les notations de l'entrée précédente, Λ(α)=|α|² et m(α)=1 pour le paramétrage par tous les éléments αL*. Ce que fait mon programme est uniquement de calculer cette somme (pour les α pas trop loin de l'origine dans L* ; pour alléger les calculs, il précalcule les fonctions de α et x et se contente ensuite de les sommer).

Commentaire mathématique : Si la dimension d'espace était impaire, l'évolution de l'équation des ondes à partir d'un δ initial se ferait uniquement sur des fronts sphériques centrés sur les points du réseau (imaginez que vous superposez une sphère centrée en chaque point de L, dont le rayon croit linéairement avec le temps, et dont l'amplitude décroît proportionnellement à la surface de façon que la quantité totale reste constante), et l'évolution à partir d'une gaussienne donne la même chose avec des sphères un peu épaissies ; en dimension paire, ce qui est le cas ici, ce « principe de Huygens » ne vaut pas, la fonction de Green de l'équation des ondes n'est pas concentrée sur une sphère[#], il y a une « queue » (négative par rapport au front d'onde, et qui apparaît en bleu sur mon animation). • Par ailleurs, même si le réseau L* ici est le réseau des poids de SU₃ et même si on a symétrie par le groupe de Weyl, il ne s'agit pas de l'équation des ondes sur SU₃ (pour ça il faudrait corriger Λ(α) et m(α)), c'est en gros ce qu'essaie d'expliquer l'interminable entrée qui précède.

[#] Ceci dit, ça doit être aussi assez joli comme dessin, une superposition de cercles de rayon croissant linéairement avec le temps et centrés sur chacun des points d'un réseau L triangulaire équilatéral.

Bon, tout ça fait des images pas trop moches, je dois l'avouer, et l'aspect « kaléidoscopique » apparaît assez clairement. Je pourrais mettre une animation de ce genre sur YouTube.

Ajout () : Voici les vidéos YouTube : pour un réseau triangulaire équilatéral et pour un réseau carré (j'ai eu la folie, dans les deux cas, de calculer ça en 1920×1080, 25fps, pour une vidéo de 3′=180s ; ça m'a pris deux fois 40 minutes de calcul, mais il faut reconnaître que le résultat n'est pas mal).

Ajout 2 : Je recopie le lien fourni dans le commentaire de Benoit qui a écrit une version bien plus efficace de mon animation en utilisant WebGL.

Mais le calcul en direct est péniblement lent. Je pensais que sur un ordinateur moderne je n'aurais même pas besoin d'optimiser et je pouvais calculer la somme de quelques centaines de cosinus par pixel d'une image de taille raisonnable à une vitesse d'animation qui dépasse la perception de l'œil humain, mais apparemment calculer des centaines de millions de cosinus par seconde ça ne se fait pas sur un simple ordinateur de bureau, en tout cas pas en JavaScript.

Comme je déteste optimiser par-dessus tout, et que JavaScript commence à me sortir par les oreilles, je ne touche plus à ce code. Si quelqu'un veut l'améliorer (rendre le truc interactif en ajoutant un bouton pause ou quelque chose comme ça, permettre de bouger, zoomer, ou ce que vous voudrez, ou encore changer le réseau — il y a juste quelques lignes à commenter/décommenter pour faire un réseau carré), envoyez-moi des patchs, mon code est lisible et commenté, mais je ne veux pas de suggestions non codées. Parce que, là, pour le moment, les incantations propitiatoires du JavaScript servant à conjurer des petites crottes de ragondin, elles me gonflent prodigieusement.

Si vous voulez savoir ce que ça donne comme son, voici la conversion directe en onde sonore de la valeur mesurée au point central (l'origine de E/L, celle où est centrée la gaussienne initiale, i.e., mettre x=0 dans les formules ci-dessus), avec exactement les paramètres de l'animation, juste accélérée d'un facteur 8800 par rapport à l'animation affichée par le JavaScript. Mais ça donne juste un bruit strident atroce (moralité, une jolie image ne correspond pas forcément à un joli son, et si je veux transformer des spectres en sons un peu harmonieux, une dissipation dans le temps, dépendant de la fréquence, est indispensable).

↑Entry #2532 [older| permalink|newer] / ↑Entrée #2532 [précédente| permalien|suivante] ↑

↓Entry #2531 [older| permalink|newer] / ↓Entrée #2531 [précédente| permalien|suivante] ↓

(lundi)

Où je commence par penser tout haut toujours à propos de spectres, et finis par ranter de façon interminable sur les caractères des groupes de Lie

Avant-propos : Cette entrée est une sorte de brain-dump, qui finit assez différemment de ce qu'elle commence. J'étais parti sur l'idée, sans avoir forcément pour but d'être compréhensible (en tout cas pas complètement, en tout cas pas par tout le monde), de jeter des réflexions surtout pour moi-même (comme une sorte de sauvegarde de mon état mental) sur des questions autour du spectre du laplacien. Sachant que je n'avais pas les idées complètement claires sur certaines des choses qui suivent, donc je ne peux pas expliquer tout ça parfaitement, encore moins le vulgariser au niveau où j'aimerais idéalement le faire : le but était plutôt de retrouver mes idées éventuellement plus tard, quitte à produire quelque chose d'un peu abscons et pas forcément bien correct mathématiquement ; et je me disais que ça ne ferait pas de mal de les mettre en ligne. Mais en pondant tout ça, je me suis laissé emporter par mon sujet, et la section sur les groupes de Lie compacts a pris une place démesurée, et s'est écartée du point de vue initial (finalement, pour ce que je raconte sur les groupes de Lie, on n'a pas vraiment besoin de savoir ce qu'est un laplacien ni de prononcer son nom, et d'ailleurs comme je prends l'exemple du groupe des rotations, on n'a pas vraiment non plus besoin de savoir ce qu'est un groupe de Lie compact) ; et j'en ai écrit des pages sur l'analyse de Fourier sur un groupe de Lie compact. Chose que je comprends quand même nettement mieux que le problème du spectre du laplacien en général, mais ça ne veut pas forcément dire que je l'explique mieux. Et finalement, je ne sais plus bien de quoi parle cette entrée, il y a plusieurs sujets assez indépendants, et le niveau auquel je place mes explications varie d'un endroit à l'autre. Bref, je ne sais pas ce que tout ça vaut, mais maintenant que c'est écrit, ce serait quand même idiot de ne pas le mettre en ligne. C'est dommage que, comme j'ai fait une énorme moussaka, tout le monde va être rebuté, mais tant pis, je n'ai plus le courage d'essayer de démêler les ingrédients de la moussaka.

Je commence en reprenant la ligne de pensées commencée dans l'entrée précédente (et inspirée par un roman de Connes, Chéreau et Dixmier, donc) : je cherche à produire des sons mathématiques intéressants (et pas déplaisants) à écouter, et une des façons d'y arriver semble être de considérer un spectre, notamment le spectre du laplacien (et donc en pratique, de l'équation des ondes) sur une variété riemannienne (compacte, parce que je ne suis pas analyste ni géomètre, moi, je ne sais pas gérer le cas non-compact[#]) ; plusieurs questions soulevées incidemment : quels objets choisir pour lesquels on sait calculer explicitement le spectre du laplacien (et qu'est-ce que ça signifie au juste) ?, quelles données sont associées au spectre en question ?, comment précisément convertir ce spectre en un son ?, d'ailleurs, comment mener le calcul sur ordinateur ? ; et aussi : comment vulgariser la notion de spectre du laplacien (notamment sur un groupe de Lie, espace riemannien symétrique, etc.) ? (Je ne compte pas tant essayer de faire cette vulgarisation ici et maintenant, mais peut-être donner les pistes par lesquelles je l'aborderais pour pouvoir les retrouver si je devais le faire plus tard.) Je vais évoquer le cas des tores plats (quotients de l'espace euclidien par un réseau) puis, comme expliqué au paragraphe précédent, je vais dévier sur la théorie de Weyl de l'analyse harmonique sur les groupes de Lie compacts, ce qui est largement indépendant de ce que je raconte au début. Et à la fin, je serai trop fatigué pour parler des espaces riemanniens symétriques autrement que pour dire que suis trop fatigué.

[#] Une blague, qui est d'ailleurs peut-être une histoire vraie, qu'on m'avait racontée il y a longtemps, concerne un mathématicien dont la femme… — non, ne soyons pas sexiste comme ceux qui m'ont raconté cette histoire, je vais plutôt dire : — une mathématicienne dont le mari ne connaît absolument rien aux maths ; mais elle lui a donné l'astuce suivante permettant presque à tous les coups de poser une question pertinente lors d'un échange entre matheux : il suffit d'attendre qu'il y ait une petite pause dans la conversation, de prendre un air pensif, et de demander et est-ce que vous avez considéré le cas non-compact ?.

Plan

↑Entry #2531 [older| permalink|newer] / ↑Entrée #2531 [précédente| permalien|suivante] ↑

↓Entry #2528 [older| permalink|newer] / ↓Entrée #2528 [précédente| permalien|suivante] ↓

(lundi)

Le Spectre d'Atacama — et quelques spectres de groupes de Lie à écouter

(La première partie de cette entrée parle d'un roman qui parle de maths, la second parle de maths vaguement inspirées par le roman en question : à part cette proximité d'idées, il n'y a pas vraiment de rapport entre elles. Si les maths vous ennuient, à la fin, il y a des sons bizarres à écouter.)

Je viens de finir de lire le livre Le Spectre d'Atacama d'Alain Connes, Danye Chéreau et Jacques Dixmier, et j'avoue que je ne sais pas bien ce que j'en ai pensé. Pour commencer, c'est un livre assez difficilement classable : une sorte de mélange entre roman de science-fiction, fantaisie poétique, vulgarisation scientifique, plaidoyer sur l'intelligence artificielle, conte philosophique, récit picaresque et transposition en fiction de cet essai sur l'hypothèse de Riemann. Chacun des ingrédients me plaît a priori, et j'aime beaucoup l'idée de faire de la fiction à partir de la science, y compris de façon un peu poétique ; mais je trouve le mélange trop peu homogène… disons qu'il y a des grumeaux.

Le style est souvent un peu faible, mais ça ne me gêne pas tant que ça ; ce qui me gêne nettement plus, en revanche, c'est que l'intrigue part tellement dans tous les sens, accumule tellement d'invraisemblances et de rebondissements en apparence gratuits que ma suspension d'incrédulité, à force d'être tellement secouée, finit par lâcher complètement le coup. Parfois le roman devient didactique, parfois il est humoristique, parfois encore onirique, mais il y a trop de moments où on ne sait pas vraiment à quel degré le lire. L'idée de départ est bonne : un astrophysicien travaillant au réseau d'antennes de l'Atacama détecte un spectre d'absorption qui l'intrigue et fait appel à un ami mathématicien (de l'IHÉS…) pour essayer de le comprendre. Il y a aussi quelques tableaux du milieu académique qui sont plutôt réussis. Mais rapidement, et quitte à divulgâcher jusqu'à la fin de ce paragraphe, il est question d'une physicienne qui a volontairement passé son cerveau dans le rayon du LHC et qui a acquis la conscience quantique de vivre dans un espace de Hilbert et des capacités transhumaines mais seulement quand elle est à proximité d'un certain ordinateur : et là, je trouve que c'est vraiment un peu trop ; en plus de ça, le mathématicien part dans un périple dont on ne comprend pas vraiment le sens, qui l'emmène à Valparaiso puis sur une île perdue au milieu de nulle part puis à Sainte-Hélène, et tout ça ne sert pas vraiment l'intrigue. Et quand il est question d'ordinateurs, on sent que les auteurs ne sont pas du tout dans leur élément.

Ceci étant, je pense que c'est un ouvrage intéressant sur le plan de la communication scientifique : pas tellement d'idées scientifiques (il y a un peu de vulgarisation, mais ce n'est certainement pas l'objet principal du livre, et elle est plutôt light), mais de l'amour de la science et — et c'est important — des liens qui relient mathématiques, physique et informatique, et aussi du fait que la science « dure » peut avoir des aspects poétiques. Sur ce plan-là, je dirais que c'est plutôt une réussite. Peut-être finalement que ce roman, qui ne présuppose pas de connaissances scientifiques ou mathématiques, plaira plus à ceux qui justement l'abordent sans a priori.

J'en viens à des maths : la lecture du roman décrit ci-dessus m'a au moins convaincu (ou rappelé) que « les spectres » c'est important et intéressant. Je sais bien, pour avoir souvent entendu des gens le dire, que le spectre du laplacien (sur une variété riemannienne, disons), par exemple, c'est archi-super-important, mais j'avoue que je ne sais essentiellement rien de ce qu'il y a à dire, justement, sur ce spectre du laplacien, même dans des cas idiots (compacts, agréablement symétriques, tout ça tout ça).

En guise d'exercice, je me suis dit que j'allais calculer le spectre du laplacien pour des groupes de Lie compacts G (ou éventuellement des espaces homogènes G/H, par exemple des espaces riemanniens symétriques ou bien des R-espaces (variétés de drapeaux réelles), choses que je confonds d'ailleurs trop facilement[#]).

[#] Digression : Les espaces riemanniens symétriques irréductibles de type compact et simplement connexes sont (les groupes de Lie compacts simples simplement connexes eux-mêmes ainsi que) les quotients G/KG est un groupe de Lie compact simple simplement connexe et K le sous-groupe compact connexe maximal d'une forme réelle G₀ de G (par exemple, la sphère de dimension n est Spin(n+1)/Spin(n) où Spin(n) est le compact connexe maximal de la forme Spin(n,1) de Spin(n+1)), et on peut aussi voir K comme les points fixes d'une involution de G qui correspond à l'involution de Cartan définissant G₀ ; j'ai certainement commis quelques erreurs en disant ça (notamment dans la connexité et la simple connexité), mais l'idée générale doit être à peu près ce que j'ai dit. Les R-espaces, eux, s'obtiennent sous la forme G₁/PP est un parabolique d'un groupe de Lie réel semisimple G₁, qu'on peut aussi voir comme G/(GP) où G est un sous-groupe compact connexe maximal de G₁ et GP un sous-groupe compact maximal (du facteur de Levi) de P (par exemple, l'espace projectif réel dimension n est défini par le quotient de SL(n+1,ℝ) par son parabolique maximal associé à la première racine simple, i.e., les matrices dont la première colonne n'a que des zéros à partir de la deuxième ligne, et on peut le voir comme le quotient SO(n+1)/S(O(n)×O(1)) du sous-groupe compact connexe maximal SO(n+1) de SL(n+1,ℝ)) ; de nouveau, j'ai certainement commis quelques erreurs en disant ça, mais l'idée générale doit être ça. Je n'ai jamais vraiment compris « pourquoi » il y avait ces deux types de quotients très importants des groupes de Lie réels compacts, comment il faut y penser, par exemple du point de vue de l'analyse harmonique, et, de façon encore plus perturbante, pourquoi certains espaces peuvent se voir à la fois comme un espace riemannien symétrique et comme un R-espace (ou presque : cf. l'exemple que je viens de donner de la sphère et de l'espace projectif réel). Si quelqu'un a des éléments de réponse à m'apporter ou simplement des références où ces deux types de quotients sont discutés côte à côte de manière à me désembrouiller, ça m'intéresse ! (J'ai regardé l'article Geometry of Symmetric R-spaces de Tanaka, et j'ai eu l'impression de comprendre encore moins bien et de confondre encore plus après sa lecture.)

Mais aussi, j'avais (peut-être même que j'ai encore) vaguement l'espoir que des spectres intéressants, comme le spectre du laplacien sur tel ou tel espace bien sympathique, pourrait conduire à des sons harmonieux et donc répondre à ma question de trouver un objet mathématique qui s'« auditorise » de façon intéressante et agréable (plutôt que de se « visualiser ») ; dans cet ordre d'idées j'avais bien produit ceci, mais ce n'était pas du tout agréable à écouter et la construction de ces sons n'était pas franchement des plus naturelles.

L'idée générale, cette fois-ci, est qu'une fois connu le spectre du laplacien on peut s'en servir pour résoudre l'équation des ondes et obtenir les fréquences des vibrations propres de l'objet considéré (comme les racines carrées des opposées des valeurs propres du laplacien). Et donc produire des sons qui correspondraient à la manière dont « vibre » l'objet considéré — un groupe de Lie compact G ou un espace homogène G/H — quand, par exemple, on donne un coup dessus.

J'avoue que l'idée de taper un groupe de Lie pour voir comment il résonne me plaît énormément. (Et si j'en crois la lecture du Spectre d'Atacama, ça a aussi des chances de plaire à Connes et/ou Dixmier.)

Bref. Du peu que je sais de l'analyse harmonique sur les groupes de Lie et du théorème de Peter-Weyl, et si je comprends bien que le Casimir fournit la valeur du laplacien sur ce qui correspond à chaque représentation irréductible, le spectre du laplacien sur un groupe de Lie compact G est donné, à un facteur multiplicatif près (essentiellement arbitraire(?), mais négatif), par l'ensemble des valeurs C(v) := ⟨v,v+2ρ⟩ où v parcourt le réseau des poids dominants pour G. (Si tout ceci est du chinois pour vous, ce n'est pas très important, mais l'idée est qu'à G est associé un réseau euclidien appelé le « réseau des poids » et un cône polyédral de sommet l'origine dans cet espace euclidien appelé la « chambre de Weyl », auquel appartient le vecteur ρ dit « vecteur de Weyl », et les poids dominants sont les éléments de la chambre de Weyl ; chaque tel v, ou plus exactement le « caractère » χv associé, peut se concevoir comme un mode propre — un mode de vibration, si on veut — du groupe G, et la valeur du Casimir C(v) := ⟨v,v+2ρ⟩, est essentiellement l'opposé de la valeur propre du laplacien dont le vecteur propre est le caractère : Δχv = −C(vχv pour une certaine normalisation de Δ. S'il y a dans l'assistance des gens qui s'y connaissent en analyse harmonique et qui pourraient confirmer que j'ai bien compris, et peut-être même recommander un endroit où ce que je viens de dire serait écrit noir sur blanc sous cette forme y compris avec la valeur du Casimir, je leur serais reconnaissant.) Par exemple, pour les groupes de rang 2 : pour A₂ (i.e., SU₃), je trouve des valeurs (proportionnelles à) 8/3, 6, 20/3, 32/3, 12, 16, 50/3, 56/3, 68/3, 24, 80/3, 30… (où seules celles qui sont entières sont possibles pour la forme adjointe PSU₃) ; pour B₂ (i.e., Spin₅), je trouve 5/2, 4, 6, 15/2, 10, 21/2, 12, 29/2, 16, 35/2, 18, 20… (où seules celles que j'ai soulignées sont possibles pour la forme adjointe SO₅) ; et pour G₂, je trouve 12, 24, 28, 42, 48, 60, 64, 72, 84, 90, 100, 108… ; et sinon, pour F₄ : 12, 18, 24, 26, 32, 36, 39, 40, 42, 46, 48, 52… ; et vous devinez évidemment j'ai fait le calcul pour E₈ : 60, 96, 120, 124, 144, 160, 180, 186, 192, 196, 200, 210…

Et pour les espaces homogènes G/H, il doit s'agir de se limiter aux plus hauts poids v qui définissent des représentations de G dont la restriction à H a des points fixes (ou, ce qui revient au même par réciprocité de Frobenius, des représentations qui apparaissent dans l'induite à G de la représentation triviale de H, mais je ne suis pas si ça aide de le dire comme ça). J'arrive (mais laborieusement) à faire les calculs sur des cas particuliers en utilisant l'implémentation des règles de branchement dans Sage. Par exemple, le spectre de G₂/SO₄ (l'espace des sous-algèbres de quaternions dans les octonions) semble être : 28, 60, 72, 112, 132, 168, 180, 208, 244, 264, 300, 324… Mais je comprends trop mal les règles de branchement pour savoir s'il faut chercher une logique d'ensemble ou ce à quoi elle ressemblerait (sur les coordonnées de v dans la base des poids fondamentaux ; ce n'est même pas clair pour moi les v en question forment un sous-réseau du réseau des poids ou quel est son rang). Ajout () : À la réflexion, pour les espaces riemanniens symétriques, je crois que je comprends au moins à peu près la situation (tout est dans la notion de système de racines restreintes) ; je crois même que tout est dit dans le chapitre V (par ex., théorème V.4.1) du livre de 1984 de Sigurður Helgason (Groups and Geometric Analysis), même si j'ai vraiment du mal à le lire ; je crois bien que le rang du réseau des poids v tels que la restriction à H ait des points fixes non triviaux coïncide avec le rang de l'espace symétrique G/H, même si j'aimerais bien voir ça écrit noir sur blanc.

Une chose qui m'étonne beaucoup est que ces suites ne semblent pas être dans l'OEIS. Tout le monde parle de l'importance du spectre du laplacien et personne n'a pris la peine de mettre le résultat, pour les cas les plus évidents que sont les groupes de Lie compacts, dans l'OEIS ‽ Comment est-ce possible ‽ J'hésite cependant à les soumettre moi-même parce que, à vrai dire, je ne suis pas très sûr de bien comprendre ce que je fais. (Et, entre autres choses, je ne sais pas du tout si les valeurs que j'ai listées ci-dessus ont un sens dans l'absolu ou seulement à proportionalité près. La valeur du Casimir semble dépendre d'une normalisation un peu arbitraire sur la longueur des racines ou quelque chose comme ça, et du coup je ne sais pas bien quoi prendre ou quoi soumettre.)

Pour ce qui est de produire des sons à partir de ça, il y a un autre truc sur lequel je n'ai pas des idées claires, c'est quelles amplitudes relatives il serait logique d'utiliser pour ces différentes harmoniques. Si on donne un coup de marteau sur le groupe de Lie G₂ (mais pas assez fort pour le casser !), il va peut-être résonner à des fréquences proportionnelles aux racines carrées de 12, 24, 28, 42, 48, 60, etc., mais avec quelles amplitudes ? Le problème se pose déjà sur une sphère de dimension 2 (SO₃/SO₂, si on veut) : les valeurs propres du laplacien sphérique sont (proportionnelles à) (+1), donc si on fait vibrer une sphère, elle produit des fréquences proportionnelles à 1, √3, √6, √10, etc., mais une fois ce spectre connu, ça ne donne pas pour autant un son (même si ça peut faire de jolies animations). Un bout de la réponse est fourni par la multiplicité des valeurs propres en question (sur la sphère, par exemple, (+1) a la multiplicité +1 parce qu'il y a ce nombre-là d'harmoniques sphériques de niveau  indépendantes) ; s'agissant d'un groupe de Lie G, les multiplicités sont les carrés N(v)² des dimensions N(v) = χv(1) des représentations irréductibles correspondantes (par exemple, s'agisant de G₂, les valeurs propres avec multiplicité sont (12,7²), (24,14²), (28,27²), (42,64²), (48,77²), (60,77²), etc.). Mais ensuite ? Il me semble que, pour parler abusivement, les « coefficients » de la distribution δ (centrée en 1∈G) sur la base des caractères χv sont les N(v) = χv(1) et qu'il serait donc logique de donner à la fréquence √C(v) une amplitude proportionnelle à N(v)² (si on tape un coup sec et très localisé sur notre groupe de Lie), mais évidemment ceci diverge très méchamment. Je peux régulariser en remplaçant δ par une gaussienne, ce qui doit revenir à multiplier les coefficients par exp(−C(vσ²) avec σ une sorte d'écart-type de la gaussienne, mais le choix de σ est complètement arbitraire dans l'histoire. Bref, je peux produire des sons en superposant des fréquences proportionnelles aux √C(v) avec des amplitudes proportionnelles aux N(v)²·exp(−C(vσ²), mais le son en question dépend de façon énorme de σ. Une autre idée est de faire varier l'amplitude avec le temps pour donner une dissipation aux modes de vibration, par exemple en exp(−C(vt) (inspiré de l'équation de la chaleur).

Pour faire quand même des essais, de façon assez arbitraire, j'ai décidé de faire que l'intensité de la fréquence √C(v) décroisse en exp(−(C(v)/C(v₀))·(1+t/3s)) où v₀ est le poids qui correspond à la représentation adjointe de G (c'est-à-dire, la plus haute racine), et j'ai de même normalisé les fréquences pour que la fréquence de v₀ soit à 440Hz. C'est-à-dire que j'ai superposé des sin(2π·440Hz·(C(v)/C(v₀))·t) · N(v)² · exp(−(C(v)/C(v₀))·(1+t/3s)) où t est le temps et v parcourt les poids de G. Je n'aime pas le côté assez arbitraire de tout ça (et en particulier de mon 1+), donc je suis preneur d'idées plus naturelles, mais au moins les sons sont intéressants et, pour une fois, pas du tout désagréables à écouter.

Ceci n'est qu'une première expérience : j'en ferai sans doute d'autres quand j'aurai des idées plus claires sur ce que je veux faire et ce qui est intéressant, mais en attendant, voici quelques essais de ce que ça peut donner comme son de frapper différents groupes de Lie compacts (calibrés pour que leur représentation adjointe sonne le la à 440Hz) : en rang 1 : A₁ (c'est-à-dire SU₂, qui est vraiment une 3-sphère, je voulais vérifier que ça avait un son de cloche plausible et ça a effectivement un son de cloche vaguement plausible, c'est déjà ça) ; en rang 2 : A₂ (c'est-à-dire SU₃), B₂ (c'est-à-dire Spin₅) et G₂ ; en rang 4 : A₄ (c'est-à-dire SU₅), B₄ (c'est-à-dire Spin₉), C₄ (c'est-à-dire Sp₄), D₄ (c'est-à-dire Spin₈) et F₄ ; et bien sûr : E₆ et E₈. Tous ces fichiers sont du FLAC et chacun dure 6 secondes, si votre navigateur ne les ouvre pas spontanément, téléchargez-les et vous trouverez certainement un truc qui les lit. Tous les groupes que je viens de donner sont la forme simplement connexe, mais j'ai aussi produit des essais pour comparer le son de la forme simplement connexe avec la forme adjointe (laquelle a moins d'harmoniques) : Spin₅ versus SO₅ d'une part, et SU₃ versus PSU₃ de l'autre.

Ajout () : voir ce fil Twitter et/ou cette version sur YouTube pour les sons de quelques grassmanniennes réelles, complexes et quaternioniques, ainsi que le plan projectif octonionique.

↑Entry #2528 [older| permalink|newer] / ↑Entrée #2528 [précédente| permalien|suivante] ↑

↓Entry #2527 [older| permalink|newer] / ↓Entrée #2527 [précédente| permalien|suivante] ↓

(jeudi)

Une conjecture « du dimanche » sur les nombres premiers

Je racontais ici que les « mathématiciens du dimanche » étaient souvent fascinés par les nombres premiers et capables de produire toutes sortes de conjectures fantaisistes à leur sujet ; et aussi, ils sont fascinés par l'écriture en base 10. Voici que je vois passer sur MathOverflow (et précédemment sur Math.StackExchange) la conjecture suivante, qui ressemble beaucoup à la caricature de la « conjecture du mathématicien du dimanche », à ceci près qu'elle conjecture que des nombres ne sont pas premiers :

Soit j≥1 un entier naturel, et Nj le nombre formé de la concaténation des écritures en base 10 des nombres (« de Mersenne » consécutifs) 2j+1−1 et 2j−1 ; c'est-à-dire : Nj = 10m·(2j+1−1) + (2j−1) où m := ⌊log(2j−1)/log(10)⌋+1 est le nombre de chiffres de l'écriture décimale de 2j−1.

(Par exemple, N₁=31 (concaténation de 3 et 1), N₂=73 (concaténation de 7 et 3), N₃=157 (concaténation de 15 et 7), N₄=3115 (concaténation de 31 et 15), etc.)

Conjecture d'Enzo Creti : si Nj≡6 (mod 7), alors Nj n'est pas premier.

(Par exemple : pour j=9, on a N9=1023511, qui est congru à 6 modulo 7, et il n'est pas premier : il vaut 19×103×523 ; pour j=10, on a N10=20471023, qui est congru à 6 modulo 7, et il n'est pas premier : il vaut 479×42737.)

(Je ne sais pas si l'auteur de cette conjecture est un mathématicien « du dimanche », je ne sais rien sur lui, mais l'énoncé, en tout cas, ressemble exactement au type de spéculations sur les nombres premiers et les écritures en base 10 dont je voulais parler.)

Ce genre de problèmes est à la fois agaçant et passablement intéressant au niveau méta.

Expérimentalement, la conjecture est vérifiée jusqu'à des valeurs passablement grandes de j (l'auteur prétend être allé jusqu'à 4×10⁵ ; moi je me suis arrêté à 10⁴) ; et de plus, elle n'est pas vide, c'est-à-dire qu'il y a effectivement une densité significative (en fait, 1 sur 9) de j pour lesquels la prémisse Nj≡6 (mod 7) est vérifiée.

(On peut accessoirement remarquer que dans chacune des autres classes de congruence de Nj modulo 7, exceptée bien sûr la classe 0, on trouve des nombres premiers. C'est la classe 6 qui semble éviter les nombres premiers. À toutes fins utiles, en distinguant les cas de congruence de m modulo 6 et de j modulo 3, on peut remarquer que 10m·(2j+1−1) + (2j−1) est congru à 6 modulo 7 lorsque soit (m≡3 (mod 6) et j≡0 (mod 3)) soit (m≡4 (mod 6) et j≡1 (mod 3)).)

Pourtant, je pense que n'importe quel théoricien des nombres sera d'accord avec moi pour dire qu'il ne croit pas une seule seconde à une telle conjecture. Pourquoi ?

D'abord, on se rappelle que le théorème des nombres premiers peut s'interpréter en disant que la « probabilité d'être premier » empirique d'un entier x tiré au hasard vaut environ 1/log(x) ; ou si le nombre est impair par construction, disons plutôt 2/log(x). En l'occurrence, on a log(Nj) = 2·log(2)·j + O(1), si bien que Nj a empiriquement une « probabilité d'être premier » qui décroît comme une fonction harmonique de j (quelque chose comme 1/(log(2)·j), en tenant compte du fait qu'il est forcément impair). Or la série harmonique diverge, donc il n'est pas vraisemblable que les Nj échouent tous à être premiers « par hasard ». En revanche, comme la série harmonique diverge très lentement (logarithmiquement), cela veut bien dire qu'il peut être nécessaire de pousser très très loin pour trouver un contre-exemple, donc avoir vérifié 10⁴ ou 10⁵ valeurs ne vaut pas grand-chose, et il n'est pas du tout invraisemblable que 10⁴ ou 10⁵ valeurs échouent toutes à être premières « par hasard » (expliquant ainsi la constatation expérimentale).

Il est donc invraisemblable que la conjecture soit vraie « par hasard », mais vraisemblable qu'elle le paraisse quand même jusqu'à 10⁴ ou 10⁵. Maintenant, se peut-il que la conjecture soit vraie autrement que « par hasard » ? Cela voudrait dire qu'il y aurait une « raison » expliquant une factorisation de 10m·(2j+1−1) + (2j−1) à tous les coups (par exemple une identité algébrique, ou une conguence à 0 qui vaut à tous les coups, enfin, une « raison » qui fait qu'il n'est jamais premier). Or, si on met de côté la donnée que m est le nombre de chiffres décimaux de 2j−1, ce n'est pas vrai que 10m·(2j+1−1) + (2j−1) n'est jamais premier. En effet, en changeant un petit peu m, j'ai le contre-exemple de 1070·(2230−1) + (2229−1) (où le nombre 2229−1 a 69 chiffres décimaux, j'ai inséré juste un 0 de plus dans la concaténation) : ce nombre est bien congru à 6 modulo 7, et il est premier (il a 140 chiffres, alors vous m'épargnerez de l'écrire complètement). Bref, si la conjecture était vraie autrement que par hasard, il faudrait avoir une factorisation de 10m·(2j+1−1) + (2j−1) qui dépende du fait que m est précisément le nombre de chiffres décimaux de 2j−1, et ça, ça semble complètement abracadabrant. (Tout ce que je raconte est complètement empirique, bien sûr, je n'ai pas de contre-exemple à la conjecture énoncée plus haut, mais j'explique pourquoi je n'y crois pas.)

Bref, je suis complètement convaincu qu'il y a un contre-exemple, et que ce contre-exemple a un j très grand (donc un Nj gigantesque), et ce n'est pas très surprenant qu'il soit difficile à trouver. Pour être un peu plus précis dans la quantification de la vraisemblance, numériquement, le produit des 1−(2/log(Nj)) (i.e., leur probabilité empirique de ne pas être premiers, le 2 étant là parce qu'ils sont impairs) parcourant ceux des Nj qui sont congrus à 6 modulo 7 vaut environ 0.25 pour j allant jusqu'à 10⁴, c'est-à-dire qu'il y avait a priori environ 25% de chances pour qu'aucun de ces nombres ne soit premier compte tenu de leurs tailles (et du fait qu'ils sont impairs) ; si on monte jusqu'à 4×10⁵, cela doit tomber à environ 18%. Bref, ce n'est pas du tout invraisemblable que la conjecture soit vraie jusqu'à ce point-là « par hasard ». Il suffit qu'il y ait une dizaine de mathématiciens du dimanche qui essaient des conjectures de ce genre, et il y en aura bien un qui tombera sur une qui marche sur toutes les valeurs que sa patience lui permettra de tester ; en fait, il suffit même qu'un seul mathématicien du dimanche ait testé la restriction des Nj à suffisamment de classes de congruence modulo des petits nombres pour tomber sur une qui semble ne contenir que des nombres composés.

Il n'est cependant pas exclu à mes yeux qu'il y ait une « raison » un peu plus précise que le hasard pour laquelle la conjecture soit vraie pour des « assez petites » valeurs de j, et c'est un problème possiblement intéressant. Il est par exemple possible que plein de cas de congruence de j et de m excluent la primalité. (Un exemple idiot est que si j est congru à 0 modulo 4, sans aucune discussion sur m, alors Nj est multiple de 5 — parce que 2j−1 l'est — et donc Nj n'est certainement pas premier ; donc déjà il n'y a plus que les quatre cinquièmes des j qui jouent vraiment, et cela contribue à rendre encore moins invraisemblable que la conjecture soit vraie « par hasard » pour des petites valeurs de j. Mais il y a peut-être des choses plus intelligentes à dire.)

Il y a notamment une chose qu'on peut voir, c'est que m := ⌊log(2j−1)/log(10)⌋+1 (le nombre de chiffres décimaux de 2j−1) vaut en fait ⌊j·ξ⌋+1 où ξ := log(2)/log(10) ≈ 0.301. Les réduites du développement en fraction continue de ξ sont 1/3, 3/10, 28/93, 59/196, etc. Si je remplace m=⌊j·ξ⌋+1 par m=⌊j·x⌋+1 où x est une de ces réduites, j'obtiens d'autres suites de nombres Nj (dépendant de x que j'omets abusivement dans la notation), à savoir Nj := 10(⌊j·x⌋+1)·(2j+1−1) + (2j−1), qui coïncident avec Nj au début (et d'autant plus loin que la réduite est bonne), et je peux poser la question de la conjecture analogue pour ces suites-là. Pour x=1/3, la conjecture sur les N′ ne vaut pas, car pour j=330, le nombre N330 = 10111·(2331−1) + (2330−1) est congru à 6 modulo 7 et est premier ; pour x=3/10, la conjecture sur les N′ ne vaut pas non plus, car pour j=849, le nombre N849 = 10255·(2850−1) + (2849−1) est congru à 6 modulo 7 et est premier. Mais pour x=28/93 (autrement dit, avec Nj := 10(⌊j·28/93⌋+1)·(2j+1−1) + (2j−1)), je n'ai pas trouvé de contre-exemple : au moins jusqu'à j=10⁴, les Nj qui sont congrus à 6 modulo 7 ne sont jamais premiers. C'est déjà moins invraisembable d'imaginer que tous ces Nj-là soient premiers que pour les Nj de la conjecture de départ : on peut tout à fait imaginer qu'il y ait une distinction de quelque chose comme 93 cas selon la valeur de j qui permette, dans chacun des cas (ou simplement dans un grand nombre de ces cas, diminuant d'autant le hasard !), de montrer que Nj serait divisible par quelque chose. Du coup, si Nj n'est jamais premier, cela expliquerait que plein de petites valeurs de Nj soient composées, et il est encore moins surprenant qu'ensuite on tombe par hasard sur des nombres composés.

Mise à jour (avant publication) : bon, en fait, pour j=14058, le nombre N14058 = 104233·(214059−1) + (214058−1) est congru à 6 modulo 7 et semble être premier (en tout cas il passe des tests de pseudo-primalité), donc mon explication n'est pas la bonne, mais je la laisse parce qu'on voit que ce genre de choses est tout à fait imaginable.

Laissant de côté la question mathématique proprement dite, il reste la question de savoir comment un mathématicien (au hasard, féru de vulgarisation) doit réagir face à ce genre de conjectures. C'est toujours un peu délicat d'expliquer je n'y crois pas du tout malgré vos constatations expérimentales, et même si on peut expliquer tout ce que je viens d'expliquer sur les probabilités, il reste quand même un certain acte de foi, quand je dis qu'il est « complètement abracadabrant » qu'il y ait un phénomène de ce genre sur les nombres premiers qui fasse intervenir de façon cruciale le nombre de chiffres décimaux du nombre 2j−1 (même si on le revoit comme ⌊j·ξ⌋+1 avec ξ = log(2)/log(10)).

↑Entry #2527 [older| permalink|newer] / ↑Entrée #2527 [précédente| permalien|suivante] ↑

↓Entry #2522 [older| permalink|newer] / ↓Entrée #2522 [précédente| permalien|suivante] ↓

(mercredi)

Les revêtements doubles du groupe symétrique sont pénibles

Écrire l'entrée récente sur la vulgarisation des mathématiques m'a motivé a essayer d'écrire un morceau de vulgarisation sur la symétrie, les groupes finis et (l'histoire de) la classification des groupes simples finis. Comme c'était évidemment prévisible, ce texte est en train de grandir jusqu'à une taille démesurée, et comme d'habitude le risque commence à devenir sérieux que je finisse par en avoir marre et que je laisse tomber ; j'essaierai, le cas échéant, de m'efforcer de publier ce que j'aurai déjà écrit même si c'est inachevé plutôt que le garder indéfiniment dans mes cartons en pensant je finirai peut-être un jour. Ceci n'est pas le texte en question : c'est une tangente qui est déjà insupportablement longue en elle-même. Mais ceci est une illustration de ce que je disais dans l'entrée récente liée ci-dessus : on apprend toujours quelque chose en faisant de la vulgarisation, même quand on croit se placer à un niveau où on sait déjà tout ; et aussi que ça peut être un problème mathématiquement difficile de trouver comment bien expliquer ceci ou cela.

Puisqu'il s'agit de raconter mes difficultés, je m'adresse dans ce qui suit à des lecteurs qui sont déjà familiers avec la notion de groupe (et de sous-groupe, de quotient, de permutations, de signature (=parité) d'une permutation, et quelques choses à peu près à ce niveau-là). Normalement le contenu de l'entrée interminable que je viens de promettre pour un lendemain rieur devrait suffire à comprendre celle-ci (mais bon, c'est la théorie ; pour la pratique, je ne sais pas bien). Bref.

Remarque informatique : J'utilise la notation 𝔖 pour le groupe symétrique et 𝔄 pour le groupe alterné. Vous devriez voir une ‘S’ gothique (enfin, fraktur) pour le premier et un ‘A’ gothique pour le second. Mais on me souffle que dans certaines contrées reculées où la totalité d'Unicode ne baigne pas encore le monde de sa lumière bienfaisante et où les polices sont incomplètes, ces deux symboles pourraient apparaître comme des simples carrés (sans même un numéro hexadécimal à l'intérieur permettant de les distinguer simplement), ce qui est un peu fâcheux si je cherche à dire que 𝔄n est simple (pour n≥5) alors que 𝔖n n'est que « presque simple », par exemple. Pour toucher aussi ces provinces reculées (ainsi que les gens qui font une allergie à l'écriture gothique), j'ai prévu un peu de magie en JavaScript qui remplacera en un seul clic tous ces symboles par des identifiants plus explicites Sym et Alt : cliquez ici pour activer ce remplacement.

Je commence par expliquer le contexte (même si ce n'est pas vraiment important pour ce que je veux raconter ci-dessous, et c'est un peu plus technique, donc on peut ignorer), une des idées que je veux évoquer, au moins rapidement et en petits caractères, même si c'est un peu technique, est le fait qu'un groupe simple fini non abélien G apparaît souvent, dans la nature, « étendu » par des petits groupes (résolubles, souvent cycliques), de l'une ou l'autre, ou les deux, de manières (que, à ma grande honte, j'ai beaucoup tendance à confondre). À savoir : (1) « par la droite » par des automorphismes extérieurs, c'est-à-dire sous la forme d'un groupe E (dit presque simple) intermédiaire entre G et le groupe Aut(G) des automorphismes de G, si bien que G est un sous-groupe distingué de E avec un « petit » quotient (le plus gros possible étant le groupe Out(G)=Aut(G)/Int(G) des automorphismes extérieurs de G) ; ou bien (2) « par la gauche » par un sous-groupe central, c'est-à-dire sous la forme d'un groupe G˜ (dit quasisimple), parfait (= sans quotient abélien), ayant cette fois G comme quotient par un noyau contenu dans le centre de G˜ (et de nouveau il y a un plus gros revêtement possible, donné par le multiplicateur de Schur) ; et on peut avoir les deux à la fois, ce qui complique encore les définitions (je n'en connais d'ailleurs pas qui ne soient pas passablement pénibles à donner, donc si quelqu'un a ça, ça m'intéresse), et en plus on se perd dans les marais de l'« isoclinisme ». Je voudrais donner des exemples des deux phénomènes, voire des deux à la fois. Ne voulant pas supposer que mon lecteur est familier avec l'algèbre linéaire, je voudrais donner l'exemple du groupe alterné G = 𝔄n des permutations paires sur n objets. À ce moment-là, l'exemple de la situation (1) est facile à donner, c'est le groupe symétrique E = G:2 = 𝔖n de toutes les permutations sur n objets (et il n'est pas difficile d'expliquer que l'automorphisme intérieur défini par une permutation impaire devient, quand on le restreint au groupe alterné G = 𝔄n, un automorphisme extérieur). La situation (2) se produit aussi, et il existe un revêtement double G˜ = 2·G = 2·𝔄n, et deux revêtements doubles (« isoclinaux ») 2·𝔖n⁺ et 2·𝔖n⁻. J'ai donc bien envie d'essayer de décrire à quoi ressemblent ces groupes. L'ennui, c'est qu'ils ne sont vraiment pas commodes à décrire.

Ce dont il est question, ce sont deux groupes 2·𝔖n⁺ et 2·𝔖n⁻ qui sont des « revêtements doubles » du groupe symétrique 𝔖n sur n objets, et qu'on peut considérer comme des sortes de « permutations avec un signe »[#].

[#] (Ajout)Il vaut mieux éviter de dire permutations signées, parce que le groupe des permutations signées est encore autre chose (que les quatre groupes de permutations-avec-un-signé décrits ci-dessous, et qui ont tous 2·n! éléments) : le groupe des permutations signés, ou « produit en couronne » {±1} ≀ 𝔖n, lui, a 2n·n! éléments : on peut le décrire comme les permutations de l'ensemble {±1}×{1,…,n} qui, si elles envoient (+1,x) sur (±1,y) doivent alors nécessairement envoyer (−1,x) sur (∓1,y) (autrement dit, changer la première coordonnée de la source change la première coordonnée de la cible) ; on peut aussi voir ça comme des matrices dont toutes les entrées sont nulles sauf qu'il y a des ±1 sur le graphe d'une permutation (entre lignes et colonnes). Ce groupe {±1} ≀ 𝔖n, bien que plus gros, est assez simple à manipuler, et malheureusement il ne contient pas (sauf pour n très petit) les groupes 2·𝔖n⁺ et 2·𝔖n⁻ dont je veux parler ici. Je vais y revenir.

L'idée est la suivante : je vais chercher des groupes G˜ ayant 2n! éléments, à savoir deux pour chaque permutation σ dans G := 𝔖n ; disons qu'on va noter +[σ] (ou simplement [σ]) et −[σ] les deux éléments de G˜ correspondant à une permutation σ, mais attention, le choix de qui est +[σ] et qui est −[σ] est dans une certaine mesure arbitraire, c'est bien ça qui va poser problème. Je vais maintenant imposer plusieurs choses : d'abord, si 1 désigne la permutation triviale (l'identité : celle qui envoie chaque objet sur lui-même), alors +[1], qu'on va juste noter +1 ou 1 sera l'élément neutre de mon groupe ; quant à −[1], qu'on va simplement noter −1, il aura la propriété que le produit (−1)·[σ] sera −[σ] et le produit (−1)·(−[σ]) sera +[σ] comme on s'y attend, autrement dit, −1 est « central » (il commute à tout) et échange +[σ] et −[σ] ; enfin, je vais vouloir que [σ]·[τ] soit ±[σ·τ] où σ·τ désigne le produit dans 𝔖n et ± signifie qu'il y a peut-être un signe (cela dépend de σ et τ : on pourrait le noter c(σ,τ)) mais je n'impose rien à son sujet (c'est-à-dire, rien que ce qui est nécessaire pour obtenir un groupe).

Il se trouve qu'il y a (pour n≥4) exactement quatre groupes qui répondent aux contraintes que je viens d'énoncer : deux sont sans intérêt (mais il est pertinent de les décrire pour expliquer un peu comment les choses peuvent fonctionner) et les deux autres sont ces fameux revêtements doubles 2·𝔖n⁺ et 2·𝔖n⁻ dus à Issai Schur :

  1. Le plus évident est le groupe produit direct {±1}×𝔖n (ou 2×𝔖n étant entendu que 2 désigne abusivement le groupe cyclique Z₂={+1,−1} à deux éléments) ; c'est-à-dire qu'ici le signe et la permutation n'interagissent pas du tout. Autrement dit, dans ce groupe-là, on a [σ]·[τ] = [σ·τ] (toujours avec un signe ‘+’), et il n'y a vraiment rien d'intéressant à en dire. Remarquons que si σ est une transposition (= permutation d'ordre 2 échangeant deux éléments et laissant fixes tous les autres), alors ±[σ] est d'ordre 2 dans ce groupe, et que si σ est le produit de deux transpositions de support disjoints (= permutation d'ordre 2 échangeant deux paires d'éléments et laissant fixes tous les autres), alors ±[σ] est encore d'ordre 2.
  2. Un groupe un petit peu moins évident est celui dans lequel [σ]·[τ] = [σ·τ] sauf lorsque σ et τ sont toutes les deux impaires, auquel cas [σ]·[τ] = −[σ·τ]. Faute d'idée de meilleure notation, je vais le noter 2⊙𝔖n pour y faire référence plus tard. En fait, il est peut-être plus parlant pour y penser de modifier la notation et, lorsque σ est une permutation impaire, de noter (ou en tout cas de penser comme) +i[σ] et −i[σ] plutôt que +[σ] et −[σ] les deux éléments du groupe qui relèvent σ, où i est la racine carrée complexe standard de −1, auquel cas la règle des signes que je viens de donner est assez logique. (Je répète que je ne change pas du tout le groupe, là, je change juste la manière de noter ses éléments ou simplement d'y penser.) Ce groupe a la propriété que si σ est une transposition, alors ±[σ] est d'ordre 4 dans ce groupe (puisque son carré va être −1 d'après la règle de signe), et que si σ est le produit de deux transpositions de support disjoints, alors ±[σ] est d'ordre 2.
  3. On a le groupe 2·𝔖n⁺ que je vais essayer (sans grand succès) de décrire : il a la propriété que si σ est une transposition, alors ±[σ] est d'ordre 2 dans ce groupe (son carré vaut 1), et que si σ est le produit de deux transpositions de support disjoints, alors ±[σ] est d'ordre 4 (son carré vaut −1).
  4. Enfin, on a le groupe 2·𝔖n⁻ : il a la propriété que si σ est une transposition, alors ±[σ] est d'ordre 4 dans ce groupe (son carré vaut −1), et que si σ est le produit de deux transpositions de support disjoints, alors ±[σ] est également d'ordre 4 (son carré vaut −1).

Les deux premiers groupes dont je viens de parler (2×𝔖n et 2⊙𝔖n) deviennent identiques si on se limite aux permutations paires (et c'est toujours aussi inintéressant : c'est {±1}×𝔄n qu'on peut aussi noter 2×𝔄n) ; il en va de même des deux derniers : on note 2·𝔄n (groupe d'ordre n!) la restriction de l'un ou l'autre de 2·𝔖n⁺ ou 2·𝔖n⁻ aux permutations ±[σ] avec σ paire.

↑Entry #2522 [older| permalink|newer] / ↑Entrée #2522 [précédente| permalien|suivante] ↑

↓Entry #2520 [older| permalink|newer] / ↓Entrée #2520 [précédente| permalien|suivante] ↓

(mardi)

Mathématiques discrètes et continues

(Pour l'explication du titre, voir cette vieille entrée.)

J'assistais tout à l'heure à une séance de présentation, pour les élèves de Télécom ParisPloum où j'enseigne, des différentes filières (=spécialisations) entre lesquelles ils doivent piocher pour leur deuxième année. (La première année est généraliste, et en seconde année ils doivent choisir essentiellement deux-parmi-N spécialisations.) À vrai dire, j'étais plus là pour écouter les questions des élèves et les réponses faites par mes collègues, qui s'en sortaient très bien et n'avaient pas trop besoin de mon aide ; mais c'est intéressant, ne serait-ce que sociologiquement, de savoir ce que nos élèves ont comme questions à poser, et éventuellement comme préconceptions, sur les enseignements qu'on leur propose.

L'une des filières où j'enseigne s'appelle MITRO comme Mathématiques, Informatique Théorique, et Recherche Opérationnelle : c'est un rassemblement légèrement hétéroclite de cours à dominance plus théorique ayant pour but de donner une culture générale utile, soit en complément d'autres filières, soit pour entrer dans un master en informatique ou en recherche opérationnelle ; j'y fais un cours de théorie des jeux dont j'ai déjà parlé. (J'enseigne aussi un cours sur les courbes algébriques dans une filière AC2Q comme Algèbre, Codage, Crypto, Quantique, et les deux filières ont une intersection assez importante dans leur population d'élèves.)

Et une des questions qui m'a frappée à laquelle mon collègue présentant MITRO a dû répondre à un bon nombre de reprises, portait sur le contenu des mathématiques. Ça ne m'avait pas tellement frappé les années précédentes, ou peut-être que je n'avais juste pas fait attention :

En fait, nos élèves ont une vision très étroite de ce que sont les mathématiques. Et on ne peut pas leur en vouloir : ils sortent (pour l'essentiel) des classes prépa françaises, où on leur a enseigné, au moins sous l'étiquette mathématiques, des maths qui se limitent essentiellement à deux choses, (1) de l'algèbre linéaire, (2) de l'analyse réelle classique, et depuis récemment un peu de (3) probabilités. En première année à Télécom, ils ont des cours de maths qui couvrent les probabilités et encore plus d'analyse (un peu d'analyse fonctionnelle, cette fois ; j'enseigne aussi dans le cadre de ce cours-là). Donc au final, pour eux, les maths, c'est des espaces vectoriels (réels ou complexes), des intégrales et des probas (essentiellement). Et ils nous demandent, soit en l'espérant soit en le craignant, s'il y a des choses comme ça dans la filière MITRO. La notion de maths discrètes leur est largement inconnue.

Mais ce qui est un peu ironique, c'est qu'en fait ils ont déjà fait des maths discrètes (par exemple, ils savent ce que c'est qu'un graphe, un arbre, ce genre de choses) : simplement, ils en ont fait, en prépa ou après, dans des cours étiquetés informatique. Et j'enseigne moi-même un cours sur les langages formels (cf. ici) qui, dans mon esprit, est clairement un cours de maths, mais qui est étiqueté informatique (ceci provoque d'ailleurs des malentendus dans l'autre sens, parce que j'en ai qui se plaignent qu'on ait besoin de raisonner).

Je suis de l'avis que l'informatique théorique, ainsi qu'une bonne partie de la physique théorique, fait partie des mathématiques. En fait, pour moi, les mathématiques ne se définissent pas par leur objet d'étude mais par leur méthode, c'est-à-dire le fait qu'on arrive à la vérité par un raisonnement déductif dont la rigueur se cherche dans l'aspect formel ou du moins formalisable ; par opposition, essentiellement, aux sciences expérimentales dont la méthode est inductive et la rigueur se cherche dans l'application méticuleuse d'un protocole expérimental. Il se trouve que cette distinction — qui n'exclut pas qu'il y ait des régions intermédiaires où on combine un raisonnement partiellement heuristique et des constatations expérimentales — est largement transverse à un domaine comme l'informatique, la physique ou l'astronomie, et je classifie donc l'informatique théorique comme étant à la fois des maths (pour la méthode) et de l'informatique (pour la finalité).

Mais peu importent les classifications. (Si vous trouvez que je dis des conneries ci-dessus, je n'ai pas vraiment l'intention de défendre ma position, je dis comment je pense spontanément les choses, mais fondamentalement je me fous un peu de savoir comment on place les frontières entre les domaines d'investigation du savoir humain.) Ce qui m'inquiète, c'est l'effet de myopie disciplinaire.

Que les classes prépa françaises n'enseignent essentiellement que de l'algèbre linéaire, de l'analyse réelle classique et des probabilités, je ne me sens pas spécialement fondé à le critiquer. À un certain niveau, j'aimerais bien qu'on y rencontre la notion de corps fini, mais je comprends qu'il y a plein de choix à faire, que tout le monde tire la couverture à soi, que c'est très politique, etc.

Mais ce que je trouve vraiment regrettable, quand je repense à l'entrée que je viens d'écrire où j'évoque l'idée que le grand public se fait des mathématiques (manipuler des gros nombres ou manipuler des grosses formules), c'est que des élèves qui en ont quand même avalé nettement plus que le grand public aient toujours une idée finalement toujours aussi étroite de ce que sont les mathématiques. C'est-à-dire que je trouve que, même si on n'a pas le temps d'enseigner ceci ou cela de précis, et même si « ça ne sert à rien » (or je ne crois pas que ça ne serve à rien), on doit quand même pouvoir trouver le moyen de faire un survol de ce que sont les branches, et comment elles se nomment, des mathématiques, toutes les mathématiques. (Disons au moins en se donnant comme but que ce ne soit pas une surprise d'apprendre qu'il y a des mathématiciens qui étudient les graphes et qui n'ont qu'un rapport extrêmement lointain avec l'informatique. Mais aussi pour pouvoir leur dire, voyez, ce qu'on va vous enseigner, c'est les parties anciennes de ce tout petit bout-là.) Je pense bien sûr la même chose des autres sciences qu'ils peuvent être amenés à étudier, même si j'ai l'impression — peut-être effet de ma propre myopie — que la « cartographie » des mathématiques est particulièrement mal connue.

↑Entry #2520 [older| permalink|newer] / ↑Entrée #2520 [précédente| permalien|suivante] ↑

↓Entry #2519 [older| permalink|newer] / ↓Entrée #2519 [précédente| permalien|suivante] ↓

(dimanche)

Réflexions décousues sur la vulgarisation mathématique

Bon, il faut peut-être que j'arrête d'intituler mes entrées quelques réflexions sur… ou réflexions décousues sur…, parce qu'à peu près tout ce que j'écris finit par rentrer dans cette forme. Mais j'aime bien me retrancher derrière cette sorte d'excuse quand je ne sais pas très bien à l'avance ce que je vais raconter et/ou que je n'ai pas envie d'essayer d'élaborer un plan. [Ajout : J'ai essayé de faire un plan a posteriori en insérant des intertitres à certains points dans cette entrée, peut-être que ça aide à la lire.]

☞ Vulgarisation à différents niveaux

La vulgarisation mathématique (et occasionnellement, physique) occupe une grande place dans ce blog. Enfin, déjà, il faut se demander ce que le terme vulgarisation recouvre au juste, vu que je parle rarement en faisant l'effort d'être compréhensible par un public complètement non-initié (i.e., Madame Michu — parce que ma maman en a marre d'être prise en exemple de la-personne-qui-ne-connaît-rien-aux-maths), mais je pense qu'il y a justement une place intéressante, et trop peu exploitée, pour toute forme de communication qui s'adresse à un public plus large que les spécialistes mais néanmoins plus étroit que le vulgum pecus, par exemple un scientifique d'un autre domaine, ou un enseignant du secondaire. (Le monde scientifique est tellement cloisonné[#] que les initiatives par lesquelles les biologistes et les informaticiens se tiendraient mutuellement au courant de leurs recherches, hors d'un cadre d'applications directes, sont extrêmement rares, et c'est même le cas entre algébristes et analystes ; et il en va semblablement entre enseignants-chercheurs dans le supérieur et enseignants du secondaire. Tout cela est vraiment triste.) Convenons d'appeler encore ça de la vulgarisation. Je ne sais pas si c'est exactement ça que j'essaie de faire, le niveau auquel je place mon exposition de tel ou tel concept mathématique dépend plus de mon inspiration du moment et de la difficulté du concept lui-même que de l'intention de viser tel ou tel public que je cerne, de toute façon, assez mal. Mais il est certain que j'écris des explications à ces niveaux assez variés[#2], et j'ose espérer qu'au moins une partie de ce que j'ai pu écrire au chapitre vulgarisation mathématique a été compréhensible par le très grand public et qu'au moins une partie a pu être intéressante pour d'autres matheux (et peut-être même que ces parties ont une intersection non-triviale, ce qui serait formidable). Bref.

[#] J'ai déjà plusieurs fois cité Giancarlo Rota à ce sujet : A leader in the theory of pseudo-parabolic partial differential equations in quasi-convex domains will not stoop to being understood by specialists in quasi-parabolic partial differential equations in pseudo-convex domains.

[#2] Enfin, j'ai toujours considéré ça comme évident, mais au moins une personne lisant mon blog (et que je ne dénoncerai pas) ne s'en était pas aperçu. Dès qu'il est question de maths, je ne comprends plus rien… — D'accord, mais est-ce que tu avais bien compris que parfois quand je parle de maths ce n'est pas censé être compréhensible par le grand public et parfois si ? — Hum… Là on peut vraiment considérer que c'est un échec.

☞ Mon intérêt pour la vulgarisation

Bref, je fais souvent de la vulgarisation mathématique, mais je n'ai jamais vraiment parlé de vulgarisation mathématique : pourquoi ça m'intéresse, pourquoi j'en lis, pourquoi j'en fais, etc.

Je suis tombé dans la marmite de la vulgarisation scientifique quand j'étais petit (avouons que mon papa m'a un peu poussé dans la marmite en question), par exemple à travers le livre Cosmos de Carl Sagan (tiré de la série du même nom), ou de One, Two, Three… Infinity de George Gamow (ça fait plus de trente ans que je ne l'ai pas lu, celui-là, je devrais sans doute y jeter à nouveau un œil pour voir ce qu'il contenait), ou encore The Emperor's New Mind de Penrose ainsi que (plus tard) Gödel, Escher, Bach de Hofstadter auquel le livre de Penrose est plus ou moins une réponse, ou enfin Les Trous noirs de Jean-Pierre Luminet.

Et je continue à apprécier la vulgarisation scientifique (en tout cas quand elle est bonne) à différents niveaux. Même quand je n'apprends rien sur le fond, ce qui est rarement le cas ne serait-ce que parce que les vulgarisateurs racontent de l'histoire des sciences en même temps que la science elle-même, j'apprends quelque chose de très important, qui est comment communiquer, justement, avec le grand public, ce qui est loin d'être évident, et d'autant moins évident qu'on parle d'un sujet abstrait comme la physique théorique ou les mathématiques. Une des difficultés de l'exercice est de trouver des analogies ou des images qui respectent le double impératif largement contradictoire d'être parlantes (c'est-à-dire compréhensibles mais aussi éclairantes) et correctes (c'est-à-dire qui évitent de simplifier tellement les choses que ça devient une bouillie de mots qui ne veulent plus rien dire) : c'est quelque chose de véritablement difficile, et j'essaie de retenir les bonnes analogies que je trouve pour pouvoir les resservir éventuellement. Et même quand il s'agit de quelque chose que je connais très bien, il y a toujours quelque chose à apprendre sur comment bien le résumer, comment souligner ce qui est le plus important, quoi mettre en lumière et quoi passer sous silence, etc. À titre d'exemple, le cosmologiste Sean Carroll est, à mon avis, un vulgarisateur extraordinaire, et cette petite série de cinq épisodes de trois ou quatre minutes chacun sur la direction du temps (s'adressant à des gens qui, quand même, ont une certaine culture scientifique générale) est un modèle à suivre de comment expliquer les choses clairement bien que rapidement (ou cet exposé, plus long et sans doute plus élémentaire, sur le même sujet).

Inversement, quand on écrit de la vulgarisation, on apprend toujours quelque chose sur ce sur quoi on écrit. Même quand on pense exposer quelque chose qu'on connaît parfaitement, et quel que soit le niveau auquel on se place, il y aura toujours quelque chose à apprendre, ou au moins à mieux comprendre, dans le processus d'explication. C'est une des raisons qui me pousse à me prêter à l'exercice (et plus généralement, à aimer enseigner), et je pense que cela devrait faire partie de n'importe quel travail de recherche.

☞ Pourquoi j'aime parler de trucs « vieux »

Il y a quand même une chose qui m'agace dans la vulgarisation, en tout cas comme certains la pratiquent, c'est la tendance à surreprésenter les progrès récents (dans le domaine scientifique considéré), voire, la recherche personnelle du vulgarisateur. Je comprends évidemment les raisons qui poussent à ça : il est gratifiant de parler de ce qu'on fait soi-même, et on a envie de montrer au grand public qu'on fait avancer la science, et ce qui se passe « sur le front ». Et inversement, le grand public a sans doute plus envie qu'on lui parle de la physique toute récente que de celle de Newton. L'ennui, c'est que pour bien faire comprendre la physique toute récente, il faut sans doute commencer par bien faire comprendre celle de Newton (puis celle de Maxwell, puis celle d'Einstein et celle de Schrödinger et Heisenberg… enfin, vous voyez l'idée). Forcément, dans le cadre de la vulgarisation, on va sauter des étapes, commettre des approximations, passer des choses sous silence, et peut-être ne faire qu'évoquer Newton pour dire directement des choses sur le boson de Higgs ou les ondes gravitationnelles ou la théorie des cordes ou que sais-je encore. C'est bien, et c'est normal. Mais il est quand même utile qu'il y ait aussi des gens qui vulgarisent Newton, et ce n'est pas forcément si évident que ça, et c'est vraiment utile parce que Newton est quand même bigrement pertinent dans la vie de tous les jours (certainement plus que les ondes gravitationnelles), et d'ailleurs ce serait sacrément utile dans le débat politique si le grand public connaissait un peu mieux la physique, disons, de Boltzmann (par exemple ce que j'en racontais ici). Mais je m'écarte un peu de la question de la vulgarisation pour m'aventurer dans celle de la culture générale scientifique (question sur laquelle j'aurais beaucoup à dire, mais je vais essayer de garder ça pour une autre fois).

Je ne suis pas spécialement tenté, moi, de vulgariser ma propre recherche[#3] (même en mettant de côté le fait que ma propre recherche papillonne dans tous les sens plutôt qu'elle ne progresse dans une direction bien définie). J'en ai déjà déçu plus d'un, comme ça, qui m'invitait à parler devant telle ou telle assistance (par exemple ici) et qui espérait plus ou moins que je parlerais de quelque chose d'un peu actuel : non, j'ai plutôt envie de parler d'objets ou de théories mathématiques qui sont bien connues depuis des dizaines et des dizaines d'années. Ne serait-ce que parce que plus c'est vieux, mieux c'est compris, et mieux on sait, entre autres, quelle est la bonne façon de voir et de présenter les choses. J'aime comparer les maths à un palais magnifique et incompréhensiblement gigantesque, à la structure à la fois labyrinthique et extraordinairement belle, — palais qu'on visite en étant totalement aveugle, si bien qu'on ne peut que tâtonner pour comprendre comment les salles sont agencées et quels bibelots précieux elles contiennent : si je dois emmener un groupe de touristes faire un tout petit tour du palais, je vais plutôt les emmener visiter les salles bien cartographiées que celles qu'on ne sait atteindre que par un chemin compliqué et qui sont peut-être encore en train d'être déterrées par les archéologues (hum, mes métaphores sont un peu mélangées, mais vous voyez l'idée).

[#3] Plus généralement, d'ailleurs, je constate empiriquement que les exposés scientifiques sont d'autant plus intéressants et agréables à écouter (à mon avis personnel à moi que j'ai) que l'orateur ne parle pas de ses propres travaux (c'est la règle au séminaire Bourbaki, mais j'aimerais que plus de séminaires adoptassent le même principe).

☞ Comment communiquer la beauté des mathématiques ?

C'est indiscutablement la beauté des mathématiques, et plus précisément la beauté de certains objets mathématiques, qui me motive à la fois pour faire des maths et pour communiquer autour des maths. La physique m'intéresse mais les maths font bien plus, elles m'émerveillent. J'ai déjà parlé ici et de deux de mes fascinations mathématiques les plus profondes (la symétrie et la « grandeur »), j'ai déjà plein de fois fait références à ces entrées, donc je ne vais pas revenir dessus. Mais étant moi-même envoûté par l'élégance de telle ou telle structure mathématique, j'ai envie de partager cette fascination, pas seulement à mes collègues mais aussi au grand public.

↑Entry #2519 [older| permalink|newer] / ↑Entrée #2519 [précédente| permalien|suivante] ↑

↓Entry #2518 [older| permalink|newer] / ↓Entrée #2518 [précédente| permalien|suivante] ↓

(vendredi)

Quelques notes sur la factorisation des entiers

J'ai donné mardi un exposé à des professeurs de classes préparatoires, dans le cadre d'un journée Télécom-UPS, sur la factorisation des entiers (l'idée était que je fisse un exposé général introductif sur le problème, qu'un de mes collègues donnât un exposé sur les courbes elliptiques et qu'un autre organisât un TP sur l'algorithme de Lenstra). Mes transparents ne sont sans doute pas très intéressants parce que je les ai écrits à la quatrième vitesse (quoi, le 15 mai c'est demain ? mais j'étais persuadé que c'était mercredi !), ils contiennent d'ailleurs du coup sans doute beaucoup d'erreurs ou d'approximations, et je les ai accompagnés d'énormément d'explications à l'oral ; mais à tout hasard, les voici.

↑Entry #2518 [older| permalink|newer] / ↑Entrée #2518 [précédente| permalien|suivante] ↑

↓Entry #2512 [older| permalink|newer] / ↓Entrée #2512 [précédente| permalien|suivante] ↓

(mardi)

Encore de jolies images quasipériodiques

Encore un peu d'art mathématique construit autour de l'élégance du nombre 7 et de la quasipériodicité. Cette fois-ci, je vais faire travailler votre navigateur plutôt que calculer les images moi-même (l'image qui suit, normalement, est animée et change de temps en temps ; sa périodicité est d'une semaine de 10 minutes et 04.8 secondes [correction () j'avais fait une erreur d'un facteur 1000 parce que JavaScript renvoie le temps en millisecondes et pas en secondes]) :

Jeu de couleurs : Échelle :

M'étant fatigué à programmer ça, j'avoue que j'ai maintenant un peu la flemme d'expliquer de quoi il s'agit (surtout que je ne suis pas sûr d'en avoir une idée si précise moi-même), et je suis un peu tenté de dire vous n'avez qu'à lire le source JavaScript, il n'est pas obfusqué. Mais pour dire quand même un peu d'où ça sort, je suis parti d'une jolie construction de pavages de Penrose décrite dans un article de Nicolaas Govert de Bruijn, Algebraic theory of Penrose's non-periodic tilings of the plane, I, Nederl. Akad. Wetensch. (=Indag. Math.) 43 (1981), 39–42 (notamment §4), et j'ai remplacé 5 par 7 un peu partout (on peut d'ailleurs changer seven = 7 par d'autres valeurs dans mon code et voir ce que ça fait, ça devrait marcher ou au moins marchouiller) et supprimé une hypothèse qui a sans doute un intérêt pour cet article mais pas vraiment s'il s'agit juste de faire de « jolies images ». (Cet article m'avait été présenté par un candidat au moment où j'étais examinateur aux TIPE à l'ENS. J'avais écrit du code à ce moment-là, mais je n'avais pas bien compris comment fabriquer quelque chose de symétrique, et par ailleurs je coloriais les morceaux de façon bizarre, donc ça ne donnait pas un résultat très beau ; j'y ai repensé en écrivant l'entrée précédente.)

Très sommairement, la construction est la suivante : on part de sept familles de droites parallèles régulièrement espacées dont les directions sont séparées des multiples de 2π/7 (dans un premier temps, on pourra imaginer que l'origine du plan est à mi-chemin entre deux droites dans chaque famille) : appelons ça une heptagrille. On fait l'hypothèse qu'il n'y a pas de points où trois droites différentes de l'heptagrille se coupent. Le pavage sera en quelque sorte dual de l'heptagrille, au sens où à chaque intersection de deux droites de l'heptagrille on va associer un losange du pavage (et chaque sommet du pavage est associé à une composante connexe du complémentaire de la réunion des droites de l'heptagrille). Pour calculer les coordonnées d'un point du pavage, on commence par attribuer des valeurs entières aux bandes délimitées par les droites de chaque famille de l'heptagrille, disons de façon que l'origine ait la valeur 0 : pour un point P « général » du plan où vit l'heptagrille (« général » c'est-à-dire non situé sur une droite) on a ainsi sept valeurs entières k₀,…,k₆, selon les bandes où il se situe, et on associe à P le point Φ(P) du plan complexe somme des kj·ζjζ=exp(2iπ/7) est une racine septième de l'unité ; si le point P est sur une droite, l'un des kj va prendre deux valeurs entières adjacentes au voisinage de P, et s'il est sur deux droites à la fois, on va avoir deux des kj qui prennent deux valeurs adjacentes : les quatre points associés par Φ (i.e., sommes des kj·ζj) sont alors les quatre sommets d'un losange du pavage. Ceci définit le pavage, qu'il est facile de construire en énumérant tous les points de croisement de droites de deux familles de l'heptagrille. (La forme du losange est déterminée par l'écart entre les angles des deux droites qui s'intersectent au point auquel il est associé.) Pour muter le pavage, on peut décaler les différentes familles de droites constituant l'heptagrille (si le décalage est le même pour chaque famille, la symétrie est conservée).

Bon, la description ci-dessus est certainement assez obscure, mais je n'ai pas le temps d'expliquer mieux. Par ailleurs, il y a certainement quelque chose d'intelligent à dire qui fait intervenir les mots système de racines de type A et plan de Coxeter, mais là, tout de suite, comme ça, je ne vois pas bien.

Ajout () : J'ai ajouté un sélecteur pour afficher ça en couleurs (les couleurs sont choisies d'après l'orientation des losanges). Mais je continue à préférer nettement la version en teintes de gris (choisies d'après la forme des losanges). Nouveaux ajouts : J'ai aussi ajouté de quoi changer l'échelle, et de quoi se déplacer (cliquer+déplacer la souris), voir aussi l'entrée suivante.

↑Entry #2512 [older| permalink|newer] / ↑Entrée #2512 [précédente| permalien|suivante] ↑

↓Entry #2511 [older| permalink|newer] / ↓Entrée #2511 [précédente| permalien|suivante] ↓

(lundi)

Je fais de jolies images avec la transformée de Fourier

[Transformée de Fourier d'un carré]

[Transformée de Fourier d'un hexagone]

[Transformée de Fourier d'un octogone]

[Transformée de Fourier d'un décagone]

[Transformée de Fourier d'un dodécagone]

[Transformée de Fourier d'un tétradécagone]

[Transformée de Fourier d'un hexadécagone]

[Transformée de Fourier d'un octadécagone]

[Transformée de Fourier d'un icosagone]

[Transformée de Fourier d'un doicosagone]

[Transformée de Fourier d'un tétraicosagone]

Pour une fois, cette entrée mathématique n'a aucun autre but que de « faire joli ». Il y a peut-être des choses intéressantes à dire à ce sujet (et ces choses intéressantes font peut-être intervenir des mots comme quasi-cristal ou pavage de Penrose), mais je n'ai pas vraiment envie d'y réfléchir.

Les images ci-contre à droite (faites défiler vers le haut et vers le bas, ou voyez ici sur Imgur) représentent les transformée de Fourier de polygones réguliers, et plus exactement des n-gones réguliers pour n pair allant de 4 à 24. Elles sont représentées par des nuances de gris pour les valeurs positives (où 0=noir et n=blanc) et des nuances de bleu pour les valeurs négatives (où 0=noir et −n=bleu intense). Ce que j'appelle transformée de Fourier d'un n-gone régulier (ou plus exactement, des sommets du polygone — je ne trouve pas de tournure qui ne soit pas invraisemblablement lourde), c'est la transformée de Fourier d'une somme de n distributions δ, l'une centrée en chaque sommet du n-gone (le n-gone étant lui-même centré à l'origine). Plus concrètement, la fonction tracée est donc la somme de n ondes planes (toutes en phase à l'origine) partant dans chacune des n directions régulièrement espacées autour de l'origine :

k=0n1 exp ( 2iπ ( cos(2kπn) x + sin(2kπn) y ) )

(Ou, pour les navigateurs pourris qui ne gèrent pas le MathML : ∑k=0n−1exp(2iπ·(cos(2kπ/nx+sin(2kπ/ny)).) Pour n pair, ceci est bien une fonction réelle, et elle possède une symétrie de rotation d'ordre n autour de l'origine. Contrairement à l'impression qu'on peut avoir, elle n'est pas périodique (sauf dans les cas « cristallographiques » n=4 et n=6, qui ne sont pas franchement passionnants), seulement quasi-périodique. Il n'est pas concevable une seule seconde que je sois le premier à mettre de telles images en ligne mais, bizarrement, je ne trouve pas comment d'autres gens ont pu les appeler.

On pourra noter que quand n tend vers l'infini, la fonction (correctement renormalisée) tend (en un certain sens, que je n'ai vraiment pas envie de chercher à préciser) vers une fonction de Bessel de première espèce J de la distance à l'origine : c'est ce qu'on commence à voir par le jeu d'anneaux concentriques autour de l'origine pour n grands.

Bon, enfin, ce qui importe surtout c'est que ce soit visuellement plaisant, et je trouve que ça l'est.

Comme la fonction n'est pas périodique, ça pourrait être intéressant (surtout pour n modérément grand) d'en faire un « explorateur » interactif en JavaScript, où on pourrait se déplacer dessus, zoomer ou dézoomer, et ce serait calculé en temps réel. Mais j'avoue que je n'ai pas la patience de programmer ça.

En revanche, pour ceux qui trouvent que mes images 2D ci-dessus sont trop statiques, je peux vous proposer une version 3D, qui consiste à faire la transformée de Fourier d'un polyèdre régulier et de la « trancher » en tranches 2D (c'est-à-dire, d'afficher des valeurs dans des plans parallèles les uns aux autres) selon une direction de plan qui présente une symétrie maximale (plan de Coxeter) : j'ai mis ça sur YouTube, et vous pouvez voir la transformée de Fourier d'un icosaèdre régulier et celle d'un dodécaèdre régulier (le plan de Coxeter fournit une symétrie d'ordre 10 : c'est la direction de plan parallèle à deux faces opposées quelconques du dodécaèdre). Là aussi, j'ai du mal à comprendre pourquoi une recherche Google de Fourier transform of dodecahedron ou variantes ne donne essentiellement rien (à part des choses que j'ai moi-même calculées, dont une vieille version des mêmes vidéos) : même si ça ne doit servir qu'à « faire joli », c'est pourtant quelque chose d'éminemment naturel à regarder, il me semble.

(J'ai vaguement imaginé, aussi, calculer la transformée de Fourier de polygones et polyèdres pleins, et aussi de leurs facettes et arêtes, mais outre que ce serait excessivement pénible à calculer, je pense que ce serait très décevant, en fait : ça ressemblerait sans doute à peu près la même chose mais en s'atténuant très vite quand on s'écarte de l'origine.)

↑Entry #2511 [older| permalink|newer] / ↑Entrée #2511 [précédente| permalien|suivante] ↑

↓Entry #2507 [older| permalink|newer] / ↓Entrée #2507 [précédente| permalien|suivante] ↓

(mercredi)

Le progrès récent sur le problème de Hadwiger-Nelson

J'ai déjà parlé à plusieurs reprises du problème de Hadwiger-Nelson sur ce blog (ici en général, et ici pour mes malheurs personnels liés à ce problème), et il faut que j'en reparle puisqu'il y a eu un progrès considérable. Le problème de Hadwiger-Nelson a ceci de sympathique que c'est un problème de mathématique de niveau recherche (au sens empirique où il y a, effectivement, des mathématiciens professionnels qui ont fait de la recherche dessus et publié des choses à son sujet) dont un bon élève de primaire peut comprendre l'énoncé, un bon collégien peut comprendre les meilleures bornes connues jusqu'à la semaine dernière, et un bon lycéen peut les trouver lui-même. (Enfin, quelque chose comme ça.) Je rappelle l'énoncé :

Trouver le plus petit nombre χ de couleurs nécessaires pour colorier le plan de manière à ce qu'il n'y ait jamais deux points situés à distance 1 l'un de l'autre et qui aient la même couleur.

Ce χ s'appelle le nombre chromatique du plan ou nombre [chromatique] de Hadwiger-Nelson. Jusqu'à la semaine dernière, tout ce qu'on savait était que 4≤χ≤7.

Le fait que χ≤7, c'est-à-dire que sept couleurs suffisent, est montré par un coloriage explicite (d'un pavage du plan par des hexagones) avec 7 couleurs, coloriage qui est représenté par le dessin ci-contre à droite que je recopie de ma précédente entrée sur le sujet ; l'unité de longueur est figurée par le trait noir dans le coin en haut à gauche de la figure : quel que soit l'endroit où on le place et la manière dont on le tourne, les deux extrémités tombent toujours sur deux couleurs différentes ; et le problème est, donc, de savoir si on peut faire ça avec strictement moins de sept couleurs.

La minoration χ≥4 (c'est-à-dire qu'au moins quatre couleurs sont nécessaires), elle, est démontrée par un graphe fini tout à fait explicite, appelé Moser's spindle (fuseau de Moser ?) : je le recopie lui aussi de mon entrée précédente (ci-contre à gauche), toutes les arêtes représentées ont la même longueur (l'unité de longueur), et il n'est pas possible de colorier ses sommets avec seulement trois couleurs de façon que deux sommets reliés par une arête ne soient jamais de la même couleur. (En effet, si on ne dispose que de trois couleurs, chaque triangle équilatéral de côté 1 [du graphe] doit avoir un sommet de chaque couleur, du coup, dans le graphe représenté à gauche, chacun des deux sommets en haut à droite a la même couleur que celui en bas à gauche, donc ils ont la même couleur l'un que l'autre, or ils sont reliés par une arête.) Bref, dans tout coloriage du plan avec 3 couleurs, il y en a deux situés à distance 1 qui ont la même couleur.

Si vous n'aimez pas le fuseau de Moser, vous pouvez aussi utiliser le graphe de Golomb, représenté ci-contre à gauche (lui n'était pas dans l'entrée précédente, il faut bien que je m'embête un peu à faire du SVG et à calculer que les coordonnées d'un point valent (1,√11)/6), qui est plus joli et plus symétrique. Comme le fuseau de Moser, il n'est pas coloriable avec trois couleurs : si on a seulement trois couleurs, une fois qu'on en donne une au point central, les six points à distance 1 de lui doivent partager les deux autres couleurs en alternance, et notamment les trois qui sont reliés au triangle « oblique » sont de la même couleur, ce qui ne laisse que deux couleurs pour colorier ce dernier.

Bref, la minoration vient de graphes finis tout à fait explicites.

En fait, on sait à cause d'un théorème de compacité (que les théoriciens des graphes appellent le théorème d'Erdős et de Bruijn, et que les logiciens considèrent comme une conséquence immédiate du théorème de compacité du calcul propositionnel) que toute minoration sur χ s'obtient par un graphe fini, c'est-à-dire que χ est aussi la plus grande valeur possible du nombre de couleurs d'un graphe de ce genre. Donc on peut reformuler le problème de Hadwiger-Nelson de la façon suivante :

Trouver le plus petit nombre χ de couleurs nécessaires pour colorier un nombre fini quelconque de points du plan de manière à ce qu'il n'y ait jamais deux points situés à distance 1 l'un de l'autre et qui aient la même couleur.

(Le « fuseau de Moser » ci-dessus étant à comprendre comme l'ensemble de sept points qui sont les sommets tracés : on ne peut pas colorier cet ensemble de sept points avec trois couleurs donc χ≥4.)

Jusqu'à la semaine dernière, donc, c'est tout ce qu'on savait. Toute recherche sur ce problème a porté sur des analogues ou des généralisations (nombre chromatique de l'espace, nombre chromatique du plan à coordonnées dans ceci-cela, nombre chromatique fractionnaire, ce genre de choses).

Voilà que, dimanche, un certain Aubrey (David Nicholas Jasper) de Grey a mis un papier sur l'arXiv prouvant que χ≥5 : i.e., dans tout coloriage du plan avec 4 couleurs, il y en a deux situés à distance 1 qui ont la même couleur. (Je l'ai appris par un commentaire sur ma première entrée au sujet du problème.)

C'est assez sidérant pour plusieurs raisons. D'abord parce que c'est quand même un problème sur lequel on est restés coincés pendant environ 50 ou 60 ans (l'histoire du problème est elle-même assez tarabiscotée, mais il semble que Nelson l'ait imaginé dans les années '50 et qu'il — le problème — soit devenu célèbre une petite dizaine d'années plus tard). Mais aussi parce le de Grey auteur du papier n'est pas mathématicien (ou en tout cas, pour éviter de se mouiller sur ce que mathématicien veut dire, il n'est pas mathématicien de profession, et ne semble pas avoir fait de contributions aux mathématiques avant ça) ; il est « biogérontologue », connu pour ses positions contre le vieillissement, et considéré par certains comme un gourou voire un crackpot (le fait qu'il ressemble à Gandalf doit aider ce genre de préjugés). Il ne faut pas croire sur parole n'importe quel papier mis sur l'arXiv surtout quand il annonce un résultat « spectaculaire », mais, en l'occurrence, (1) le papier est bien écrit (les arguments sont rapides mais clairs et écrits dans le style habituel dans lequel on écrit les mathématiques), et de toute façon (2) une fois connu le graphe construit, il est modérément facile de vérifier le résultat par ordinateur, des gens ont déjà vérifié qu'un des graphes décrits par de Grey est réalisable avec distance 1[#] et (au moyen d'un SAT-solver) n'est pas 4-coloriable[#2], donc le résultat principal est certifié valable (nonobstant d'éventuelles erreurs très mineures dans la description).

[#] Ici et dans la suite, j'emploie le terme réalisable avec distance 1 pour dire que le graphe est réalisable comme un ensemble de points dans le plan de sorte que toutes les arêtes aient longueur 1. (On peut éventuellement demander que, réciproquement, chaque paire de points à distance 1 donne effectivement une arête du graphe ça ne changera rien puisque ajouter des arêtes ne peut qu'augmenter le nombre chromatique.)

[#2] Ici et dans la suite, j'emploie le terme k-coloriage pour signifier, bien sûr, un coloriage avec k couleurs de façon que deux sommets reliés par une arête (i.e. à distance 1) ne soient jamais de la même couleur ; et k-coloriable pour dire qu'un k-coloriage existe.

Mais pour être épatant, ce résultat est aussi un peu frustrant, je vais essayer de dire pourquoi.

Quand j'avais commencé à réfléchir au problème de Hadwiger-Nelson, ma première intuition était que χ=7 était sans l'ombre d'un doute la bonne valeur, et qu'il s'agissait juste de trouver de bons graphes, et que, si on ne les connaissait pas, c'était juste qu'on n'avait pas cherché assez fort, notamment avec des ordinateurs. (Cette intuition initiale est donc confirmée par le résultat de de Grey, mais je ne vais pas dire ha ha, j'avais raison, puisque, comme je vais l'expliquer, j'ai ensuite changé d'avis.) En gros, ce qui fait « marcher » le « fuseau de Moser » représenté ci-dessus est qu'on a le triangle équilatéral dont les 3-coloriages sont très peu nombreux, donc suffisamment rigides pour qu'on arrive à les combiner pour fabriquer un graphe plus gros qui n'est pas 3-coloriable. L'espoir, ensuite, serait que les 4-coloriages du fuseau (ou du graphe de Golomb) soient assez rigides pour qu'on arrive à combiner plusieurs fuseaux pour former un graphe qui ne soit pas 4-coloriable. Et qu'on puisse monter encore un coup pour former un graphe qui ne soit pas 5-coloriable, puis un qui ne soit pas 6-coloriable, ce qui démontrerait χ=7.

Plus tard, j'étais beaucoup moins convaincu de χ=7 : la raison est que j'ai essayé de réfléchir à comment on pourrait construire des graphes réalisable avec distance 1 et qui ne soient pas 4-coloriables, et j'ai eu l'impression de buter contre des problèmes insurmontables. Comme je le dis au paragraphe précédent, on peut essayer de combiner des fuseaux de Moser (ou des graphes de Golomb) et essayer de limiter leurs possibilités de 4-coloriages jusqu'à toutes les tuer. Mais j'ai un peu essayé et je m'y suis salement cassé les dents : tout me semblait suggérer que plus on augmente le nombre de sommets plus les possibilités de 4-coloriages se multiplient, plus vite qu'on arrive à les tuer en ajoutant des arêtes. Pour être un peu moins vague, j'ai eu l'impression que la seule façon exploitable de fabriquer des graphes réalisables avec distance 1 dans le plan est de prendre deux graphes G₁,G₂ déjà réalisés avec distance 1 et utiliser une isométrie plane sur G₂ (en faixant G₁) pour imposer des identifications de sommets ou fabriquer des arêtes, mais pour ça, on n'a que très peu de degrés de liberté (le groupe des isométries planes est de dimension 3), donc, sauf coïncidences, on ne peut ajouter essentiellement que trois arêtes (ou une identification de sommet et une arête) ; j'ai eu l'impression que « sauf coïncidence », tout ceci devrait conduire à une borne sévère sur la dégénérescence des graphes réalisables avec distance 1, donc sur leur nombre chromatique ; en fait, qu'ils devaient être des graphes de Laman — « sauf coïncidence », donc, mais je ne voyais pas comment fabriquer des « coïncidences » intéressantes. Bref, tout ça pour dire que j'ai essayé justement l'approche que de Grey fait marcher, que je n'ai pas du tout réussi à en faire quoi que ce soit, et que je me suis même mis à penser que ça ne pouvait pas marcher « sauf coïncidence » mais que ce serait extraordinairement difficile de prouver l'inexistence de telles « coïncidences » ou, a contrario, d'en fabriquer. Du coup, j'ai commencé à douter que χ=7 soit la bonne valeur (je ne prétends pas que j'étais convaincu que χ=4, mais que ma foi dans le fait que χ=7 s'était envolée jusqu'à ce qu'on me signale la trouvaille de de Grey).

Ajout : Un autre de mes espoirs était qu'on puisse chercher à extraire un graphe de nombre chromatique au moins 5 (voire 6, voire 7) comme un sous-graphe de l'analogue de Hadwiger-Nelson sur un corps fini, disons le graphe (ℤ/pℤ)² avec une arête entre (x₁,y₁) et (x₂,y₂) lorsque (x₂−x₁)² − (y₂−y₁)² = 1. (La motivation étant que si un graphe plan est réalisable avec distance 1, il est aussi réalisable à coordonnées algébriques, ces coordonnées de scindent modulo un ensemble de densité >0 de nombres premiers p, donc imposent la même inégalité sur les nombres chromatiques des (ℤ/pℤ)² pour la relation que je viens de dire.) Évidemment, cet espoir était naïf — mais vu que les coordonnées du graphe calculé par de Grey sont dans des extensions assez petites de ℚ comme je le soupçonnais, ce n'était pas complètement stupide non plus.

C'est dire que je suis surpris par le tour de force. La lecture du papier lui-même est un peu décevante, cependant : il y a un mélange de raisonnements « à la main » sur les 4-coloriages de graphes de plus en plus grands réalisables avec distance 1, et de vérifications par ordinateur (avec différentes astuces pour rendre la vérification plus gérable), mais au final je ne suis pas vraiment Éclairé sur la manière dont il arrive à obtenir suffisamment d'arêtes eu égart au nombre de sommets (le graphe réalisable avec distance 1 et non 4-coloriable dont Dustin Mixon publie le fichier de données sur son blog — revoici le lien — a 1585 sommets et 7909 arêtes), ou sur la raison pour laquelle je m'étais trompé en pensant qu'il était très difficile d'obtenir une grande dégénérescence.

Ce qui est frustrant, c'est que ce progrès rend le problème de Hadwiger-Nelson beaucoup moins intéressant. Peut-être que la presse généraliste va s'en emparer (et raconter des conneries), et il va sans doute y avoir des efforts renouvelés pour construire des graphes plus simples prouvant χ≥5 (cf. ici) ou pour pousser jusqu'à χ≥6 voire χ=7, mais mathématiquement, le problème a un peu perdu de sa beauté. Pourquoi ? Déjà parce qu'on ne peut plus donner ça comme un exemple de problème où l'état de l'art correspond à ce qu'un lycéen peut trouver tout seul. Mais surtout je suis maintenant revenu à mon intuition première, et complètement convaincu d'une part que χ=7 et d'autre part que des graphes le démontrant peuvent se construire avec des techniques de type « dupliquer et identifier » et des recherches sur ordinateur (à supposer qu'ils ne soient pas trop grands). Il aurait été beaucoup plus intéressant de chercher à montrer que certains graphes ne peuvent pas exister que de chercher à les exhiber.

Après, on peut s'intéresser à toutes sortes de problèmes adjacents. Je soumets notamment la question suivante, ou problème de Hadwiger-Nelson lorentzien (que j'espérais rendre publique via cette note, mais comme cette dernière est partie à la poubelle, personne n'est au courant de ce problème) [ajout : cf. cette question sur MathOverflow] :

Trouver le plus petit nombre χL de couleurs nécessaires (ou bien ∞ si aucun nombre fini ne suffit) pour colorier le plan de manière à ce qu'il n'y ait jamais deux points (t₁,x₁) et (t₂,x₂) situés à intervalle de Lorentz 1 l'un de l'autre, c'est-à-dire (t₂−t₁)² − (x₂−x₁)² = 1, et qui aient la même couleur.

(Autrement dit, on remplace les cercles de rayon 1 — translatés de {x²+y²=1} — dans le problème de Hadwiger-Nelson par des hyperboles translatées de {t²−x²=1}, représentant, si on veut, un intervalle d'espace-temps. Il y a beaucoup de similarités, parce que le groupe des isométries lorentziennes, comme le groupe des isométries euclidiennes, et de dimension 3. À la différence du problème de Hadwiger-Nelson euclidien, dans le problème lorentzien les graphes réalisables avec intervalle 1 sont naturellement orientés, par la valeur de la coordonnée t ; et on peut se convaincre qu'il n'existe pas de triangle ; comme il existe néanmoins des cycles d'ordre impair, on a quand même χL≥3.)

Je conjecture que χL=∞ (en tout cas, je ne sais montrer aucune borne supérieure sur χL). Le problème semble plus dur que Hadwiger-Nelson euclidien, car il ne semble pas exister de coloriage évident avec un nombre fini de couleurs, mais a contrario, si on veut prouver χL=∞, il faudra construire toute une famille de graphes finis.

Ajout : Je devrais mentionner qu'une des raisons de s'intéresser à χL est que l'analogue complexe du nombre de Hadwiger-Nelson, c'est-à-dire le nombre chromatique χC du graphe ℂ² avec une arête entre (x₁,y₁) et (x₂,y₂) lorsque (x₂−x₁)² − (y₂−y₁)² = 1, majore à la fois χ (euclidien) et χL (lorentzien), et qu'il est lui-même majoré par le χ de ℝ⁴ pour la métrique de signature indéfinie (++−−) (c'est-à-dire le nombre chromatique du graphe ℝ⁴ avec des arêtes définies par des hyperboloïdes translatés de {t²+u²−v²−w²=1}). Je conjecture à plus forte raison que χC=∞, et en fait c'est surtout ça que je trouve intéressant (parce que c'est un problème purement algébrique).

↑Entry #2507 [older| permalink|newer] / ↑Entrée #2507 [précédente| permalien|suivante] ↑

↓Entry #2503 [older| permalink|newer] / ↓Entrée #2503 [précédente| permalien|suivante] ↓

(vendredi)

Jouons maintenant avec le groupe de Weyl de F₄ parce que c'est plus facile

Cette entrée est la petite sœur de la précédente : après avoir écrit cette dernière, je me suis rendu compte (et on me l'a par ailleurs fait remarquer dans les commentaires) qu'il y a une version plus simple de ce dont j'y parlais et que j'aurais pu évoquer. Du coup, je vais essayer de le faire ici, en utilisant massivement le copier-coller et le recherche-remplacement. Ce que je ne sais pas, c'est s'il vaut mieux lire cette entrée-ci, ou la précédente, ou les deux en parallèle ou dans un certain ordre (bon, la réponse est peut-être bien « aucune des deux »).

Note : Principales modifications systématiques par rapport à l'entrée précédente : 8→4, E₈→F₄, D₈→B₄, 696 729 600 → 1152, et (0,1,2,3,4,5,6,23) → (½,3⁄2,5⁄2,11/2) ; il n'y a que trois vecteurs dans ma liste finale au lieu de 135 ; les contraintes de parité de changements de signes disparaissent (et du coup trouver un représentant dominaint pour W(B₄) consiste juste à passer aux valeurs absolues et à trier) ; l'opération de soustraire à chacune des huit composantes le quart de la somme de toutes devient soustraire à chacune des quatre composantes la moitié de la somme de toutes. Mais il y a quelques autres différences par ci par là, comme le fait que le système de racines est un tout petit peu plus compliqué à définir (c'est bien la seule chose qui se complique). ⁂ Ah, et puis sinon j'ai un problème typographique, qui est de savoir comment représenter agréablement des demi-entiers : il y a un symbole magique ½ pour un demi, qui est bien pratique parce que ça apparaît souvent, pour trois demis et cinq demis on peut utiliser le U+2044 FRACTION SLASH et écrire 3⁄2 et 5⁄2 ce qui si vous avez la bonne police apparaîtra peut-être comme une jolie fraction ; mais pour 11/2 je ne peux pas vraiment faire mieux qu'avec un bête U+002F SOLIDUS, parce que si je mets U+2044 FRACTION SLASH à la place, la sémantique est celle de (et ça apparaîtra exactement comme ça sous certaines polices), soit un-et-demi. Du coup, j'ai le choix entre cette écriture (½, 3⁄2, 5⁄2, 11/2) qui est bien moche, ou bien écrire (1/2, 3/2, 5/2, 11/2) mais alors il y a à la fois du ½ et du 1/2 pour le même nombre, c'est bizarre ; et si j'écris 1/2 partout, le vecteur (1/2, 1/2, 1/2, 1/2) est quand même moins lisible que (½, ½, ½, ½). Remarquez, je pourrais écrire 1½ pour trois demis et 2½ pour cinq demis, mais les matheux détestent ça en général (vu que 2·½ c'est 1 et pas 5/2). Pfff, que c'est pénible, les petites crottes de ragondin.

Partons de quatre nombres (= un élément de ℝ⁴) ; pour que ce que je raconte ne suppose aucune connaissance mathématique particulière, je précise que j'appellerai ça un vecteur et j'appellerai composantes du vecteur les quatre nombres en question. Par exemple (1, 0, 0, 0), ou bien (½, 3⁄2, 5⁄2, 11/2) sont des vecteurs avec lesquels on va pouvoir jouer (ces exemples vont être intéressants pour la suite ; et oui, c'est bien un 11/2 que j'ai écrit à la fin, bear with me, ce n'est pas une blague dans le style quel est le quatrième nombre qui complète la suite : ½, 3⁄2, 5⁄2… ?c'est évidemment 11/2). Maintenant, à partir de ce vecteur, imaginons qu'on ait le droit de faire, autant de fois qu'on veut, et dans n'importe quel ordre, les opérations très simples suivantes :

  • permuter ses composantes — c'est-à-dire les réordonner — de n'importe quelle manière (par exemple, on peut transformer (½, 3⁄2, 5⁄2, 11/2) en (3⁄2, 11/2, 5⁄2, ½), ce sont les mêmes nombres écrits dans un ordre différent),
  • changer le signe — c'est-à-dire transformer en leur opposé, remplacer moins par plus et vice versa — d'un nombre quelconque des composantes (par exemple, on peut transformer (½, 3⁄2, 5⁄2, 11/2) en (½, −3⁄2, −5⁄2, −11/2), j'ai changé le signe de trois composantes),
  • soustraire à chacune des quatre composantes la moitié de la somme de toutes (par exemple, ceci transforme (½, 3⁄2, 5⁄2, 11/2) en (−9⁄2, −7⁄2, −5⁄2, ½) : la somme des nombres était (½)+(3⁄2)+(5⁄2)+(11/2)=10 donc j'ai soustrait 5 à chacun).

Voilà qui n'est pas bien compliqué. Pour fixer la terminologie les opérations des deux premiers types que je viens de dire seront appelées opérations de W(B₄) tandis que les opérations des trois types seront dites opérations de W(F₄) (je n'essaye pas du tout de définir ce que c'est que W(B₄) ou W(F₄), en tout cas pas pour le moment, ce sont juste des termes à considérer comme un bloc).

Les opérations de W(B₄) sont assez faciles à comprendre, en réfléchissant un peu on arrive assez facilement à voir ce qu'on peut faire avec (une description plus précise sera donnée plus bas, notamment, de quand on peut passer d'un vecteur à un autre par ces opérations). Celles de W(F₄), c'est-à-dire si on permet la troisième opération que j'ai dite, sont déjà plus mystérieuses mystérieuses : je vais donner quelques exemples ci-dessous ce qu'on peut faire avec.

La question générale est, que peut-on atteindre en appliquant les règles qui viennent d'être dites ? Autrement dit, partant d'un certain vecteur initial, quels vecteurs va-t-on pouvoir fabriquer avec les opérations qui viennent d'être dites (et combien y en a-t-il) ?

Pour prendre un exemple vraiment idiot, si le vecteur d'origine était (0, 0, 0, 0), on ne va pas très loin, il reste identique à lui-même sous l'effet de n'importe laquelle des opérations que j'ai décrites, et donc c'est la seule chose qu'on pourra atteindre.

Si le vecteur de départ est (1, 0, 0, 0), les opérations de W(B₄) (i.e., celles les deux premiers types) permettent de le transformer en n'importe quel vecteur ayant une composante égale à +1 ou −1 et les trois autres nulles, ou en abrégé un vecteur du type (±1, 0, 0, 0) (cela fait 4×2=8 vecteurs si on compte bien) ; la troisième opération transforme (1, 0, 0, 0) en (½, −½, −½, −½), et de là avec les opérations de W(B₄) on peut fabriquer les différents vecteurs (±½, ±½, ±½, ±½) dont toutes les composantes valent +½ ou −½ ; cela fait 2⁴=16 vecteurs de cette forme, soit 8+16=24 vecteurs : il se trouve (il faut le vérifier mais ce n'est pas difficile) que c'est tout ce qu'on obtient de la sorte : 24 vecteurs et pas plus. Ces 24 vecteurs portent le nom de racines courtes de F₄ (là aussi, je ne vais pas chercher à définir ce que ça veut dire, en tout cas pas aujourd'hui).

Pour donner un autre exemple, si le vecteur de départ est (1, 1, 0, 0), les opérations de W(B₄) permettent de le transformer en n'importe quel vecteur du type (±1, ±1, 0, 0) (deux composantes égales à +1 ou −1, les deux autres nulles : cela fait 6×4=24 vecteurs), et la troisième opération ne fait, cette fois, rien de nouveau. Ces 24 vecteurs portent le nom de racines longues de F₄ ; et réunies aux 24 vecteurs définis au paragraphe précédent, on obtient 48 vecteurs appelés système de racines de F₄ (c'est là essentiellement le seul point sur lequel F₄ est plus compliqué que E₈ défini à l'entrée précédente : il y a des racines courtes et longues alors que dans E₈ il n'y a qu'une seule longueur).

Je peux donner d'autres exemples. Si on part de (1, 1, 1, 0), on va pouvoir atteindre 96 vecteurs différents par les opérations de W(F₄) : il y a les 32 vecteurs du type (±1, ±1, ±1, 0) avec des signes quelconques (et un emplacement quelconque du 0), et les 64 vecteurs du type (±3⁄2, ±½, ±½, ±½) avec des signes quelconques (et un emplacement quelconque du 3⁄2), ce qui fait 32+64=96 vecteurs au total. Si on part de (2, 1, 1, 0), on peut aussi atteindre 96 vecteurs différents (ce sont juste ceux qui s'obtiennent déjà par les opérations de W(B₄), c'est-à-dire (±2, ±1, ±1, 0) avec des signes quelconques et une permutation quelconque des composantes). Si on part de (2, 1, 0, 0), on peut atteindre 144 vecteurs différents (les 48 du type (±2, ±1, 0, 0) et les 96 du type (±3⁄2, ±3⁄2, ±½, ±½)).

Mais dans le « cas général » (disons, celui qui se produit avec probabilité 1 si notre vecteur initial a été tiré au hasard, ou bien si on est parti de (½, 3⁄2, 5⁄2, 11/2)), on va atteindre exactement 1152 vecteurs. (En fait, la condition pour que ça soit le cas n'est pas très compliqué : il est nécessaire et suffisant, pour que cela se produise, que les quatre composantes du vecteur initial soient toutes non nulles, deux à deux distinctes, qu'il n'y en ait pas deux qui soient opposées, et qu'il n'y en ait pas non plus un certain nombre dont la somme soit égale à la somme des autres.) Et dans absolument tous les cas, le nombre de vecteurs qu'on peut atteindre sera fini, et sera même un diviseur de ce nombre maximal qu'est 1152.

(Il y a d'ailleurs exactement 16 cas possibles entre le cas le plus spécial qu'est (0, 0, 0, 0) et qui donne un seul vecteur atteignable et le cas le plus général qui en donne 1152. Mais je préfère rester vague sur ce que j'entends par un cas possible, parce que ce n'est pas vrai que chacun de ces cas donne forcément un nombre de vecteurs atteints différents. Les nombres de vecteurs atteignables possibles sont : 1, 24, 96, 144, 192, 288, 576 et 1152)

↑Entry #2503 [older| permalink|newer] / ↑Entrée #2503 [précédente| permalien|suivante] ↑

↓Entry #2502 [older| permalink|newer] / ↓Entrée #2502 [précédente| permalien|suivante] ↓

(mercredi)

Jouons avec le groupe de Weyl de E₈ et cherchons la logique

J'ai raconté plein de fois dans ce blog (généralement je fais référence à cette entrée-là, mais c'est un thème récurrent, et de toute façon je radote) à quel point je suis fasciné par la symétrie et les structures combinatoires et toujours à la recherche de nouvelles façons de faire apparaître ou de représenter des objets mathématiques que je trouve remarquables. (Tiens, je n'ai pas encore parlé de mon jeu de cartes faussement divinatoires basé sur la combinatoire des 27 droites sur une surface cubique ? Faites-moi penser à vous montrer ça, un jour.) Je voudrais essayer ici de parler de façon extrêmement élémentaire un de mes objets préférés (il s'agit du groupe de Weyl de E₈, mais chut ! je veux éviter les mots barbares) pour arriver à une sorte de petite devinette, dont je n'ai pas la réponse, sur le mode « quelle est la logique dans les nombres suivants ? ».

Avertissement : La présentation qui suit risque d'être un peu irritante pour les mathématiciens — ou d'ailleurs pour des non-mathématiciens — parce que je vais faire tout un tas d'affirmations sans aucune sorte de justification, ce qui est normal pour de la vulgarisation, mais, pire, de façon peut-être gratuitement mystifiante ou à l'encontre de l'ordre et de la présentation logiques des choses. Désolé pour ceux que ça agacera, mais cette approche a un certain mérite pour là où je veux en venir. • Pour ceux qui veulent jouer, vous pouvez sauter toutes les explications, aller voir directement la liste de nombres donnée ci-dessus, et chercher une logique élémentaire : je pense qu'il y en a une, mais je ne la trouve pas.

Ajout : Voir aussi l'entrée suivante (qui est en bonne partie un copier-coller de celle-ci) pour le cas de F₄, qui est plus simple et donc peut-être pédagogiquement préférable.

Partons de huit nombres (= un élément de ℝ⁸) ; pour que ce que je raconte ne suppose aucune connaissance mathématique particulière, je précise que j'appellerai ça un vecteur et j'appellerai composantes du vecteur les huit nombres en question. Par exemple (1, 1, 0, 0, 0, 0, 0, 0), ou bien (0, 1, 2, 3, 4, 5, 6, 23) sont des vecteurs avec lesquels on va pouvoir jouer (ces exemples vont être intéressants pour la suite ; et oui, c'est bien un 23 que j'ai écrit à la fin, bear with me, ce n'est pas une blague dans le style quel est le huitième nombre qui complète la suite : 0, 1, 2, 3, 4, 5, 6… ?c'est évidemment 23). Maintenant, à partir de ce vecteur, imaginons qu'on ait le droit de faire, autant de fois qu'on veut, et dans n'importe quel ordre, les opérations très simples suivantes :

  • permuter ses composantes — c'est-à-dire les réordonner — de n'importe quelle manière (par exemple, on peut transformer (0, 1, 2, 3, 4, 5, 6, 23) en (0, 4, 3, 6, 1, 23, 5, 2), ce sont les mêmes nombres écrits dans un ordre différent),
  • changer le signe — c'est-à-dire transformer en leur opposé, remplacer moins par plus et vice versa — d'un nombre pair quelconque des composantes (par exemple, on peut transformer (5, 6, 7, 8, 9, 10, 11, −12) en (−5, −6, 7, −8, 9, −10, −11, 12), j'ai changé le signe de six composantes, et six est bien pair),
  • soustraire à chacune des huit composantes le quart de la somme de toutes (par exemple, ceci transforme (0, 1, 2, 3, 4, 5, 6, 23) en (−11, −10, −9, −8, −7, −6, −5, 12) : la somme des nombres était 0+1+2+3+4+5+6+23=44 donc j'ai soustrait 11 à chacun).

Voilà qui n'est pas bien compliqué. Pour fixer la terminologie les opérations des deux premiers types que je viens de dire seront appelées opérations de W(D₈) tandis que les opérations des trois types seront dites opérations de W(E₈) (je n'essaye pas du tout de définir ce que c'est que W(D₈) ou W(E₈), en tout cas pas pour le moment, ce sont juste des termes à considérer comme un bloc).

Les opérations de W(D₈) sont assez faciles à comprendre, en réfléchissant un peu on arrive assez facilement à voir ce qu'on peut faire avec (une description plus précise sera donnée plus bas, notamment, de quand on peut passer d'un vecteur à un autre par ces opérations). Celles de W(E₈), c'est-à-dire si on permet la troisième opération que j'ai dite, sont déjà plus mystérieuses mystérieuses : je vais donner quelques exemples ci-dessous ce qu'on peut faire avec.

La question générale est, que peut-on atteindre en appliquant les règles qui viennent d'être dites ? Autrement dit, partant d'un certain vecteur initial, quels vecteurs va-t-on pouvoir fabriquer avec les opérations qui viennent d'être dites (et combien y en a-t-il) ?

Pour prendre un exemple vraiment idiot, si le vecteur d'origine était (0, 0, 0, 0, 0, 0, 0, 0), on ne va pas très loin, il reste identique à lui-même sous l'effet de n'importe laquelle des opérations que j'ai décrites, et donc c'est la seule chose qu'on pourra atteindre.

Si le vecteur de départ est (1, 1, 0, 0, 0, 0, 0, 0), les opérations de W(D₈) (i.e., celles les deux premiers types) permettent de le transformer en n'importe quel vecteur ayant deux composantes égales à +1 ou −1 et les six autres nulles, ou en abrégé un vecteur du type (±1, ±1, 0, 0, 0, 0, 0, 0) (cela fait 8×7×2=112 vecteurs si on compte bien) ; la troisième opération transforme (1, 1, 0, 0, 0, 0, 0, 0) en (½, ½, −½, −½, −½, −½, −½, −½), et de là avec les opérations de W(D₈) on peut fabriquer les différents vecteurs (±½, ±½, ±½, ±½, ±½, ±½, ±½, ±½) dont toutes les composantes valent ±½ avec un nombre pair de signes moins (ou, ce qui revient au même, de signes plus ; cela fait 2⁷=128 vecteurs de cette forme), soit 112+128=240 vecteurs : il se trouve (il faut le vérifier mais ce n'est pas très difficile) que c'est tout ce qu'on obtient de la sorte : 240 vecteurs et pas plus. Ces 240 vecteurs forment d'ailleurs ce qui s'appelle le système de racines de E₈ (là aussi, je ne vais pas chercher à définir ce que ça veut dire, en tout cas pas aujourd'hui).

Je peux donner d'autres exemples. Si on part de (2, 0, 0, 0, 0, 0, 0, 0) (ou de (1, 0, 0, 0, 0, 0, 0, 0), cela revient évidemment au même quitte à tout diviser par deux, mais j'ai des raisons de préférer (2, 0, 0, 0, 0, 0, 0, 0)), on va pouvoir atteindre 2160 vecteurs différents par les opérations de W(E₈) ; c'est un peu plus fastidieux à compter : pour ceux qui veulent les détails, il y a les 16 vecteurs du type (±2, 0, 0, 0, 0, 0, 0, 0), les 1024 du type (∓3⁄2, ±½, ±½, ±½, ±½, ±½, ±½, ±½) avec un nombre pair de signes d'en bas, et les 1120 du type (±1, ±1, ±1, ±1, 0, 0, 0, 0) avec des signes quelconques. Si on part de (2, 1, 1, 0, 0, 0, 0, 0), on peut atteindre 6720 vecteurs différents (c'est encore plus pénible à compter). Si on part de (5⁄2, ½, ½, ½, ½, ½, ½, ½), on peut atteindre 17 280 vecteurs différents. Si on part de (3, 1, 0, 0, 0, 0, 0, 0) on peut atteindre 30 240 vecteurs différents.

Mais dans le « cas général » (disons, celui qui se produit avec probabilité 1 si notre vecteur initial a été tiré au hasard, ou bien si on est parti de (0, 1, 2, 3, 4, 5, 6, 23)), on va atteindre exactement 696 729 600 vecteurs. (En fait, la condition pour que ça soit le cas n'est pas très compliqué : il est nécessaire et suffisant, pour que cela se produise, que les huit composantes du vecteur initial soient deux à deux distinctes, qu'il n'y en ait pas deux qui soient opposées, et qu'il n'y ait pas non plus un nombre pair d'entre elles dont la somme soit égale à la somme des autres.) Et dans absolument tous les cas, le nombre de vecteurs qu'on peut atteindre sera fini, et sera même un diviseur de ce nombre maximal qu'est 696 729 600.

(Il y a d'ailleurs exactement 256 cas possibles entre le cas le plus spécial qu'est (0, 0, 0, 0, 0, 0, 0, 0) et qui donne un seul vecteur atteignable et le cas le plus général qui en donne 696 729 600. Mais je préfère rester vague sur ce que j'entends par un cas possible, parce que je ne crois pas que chacun de ces cas donne forcément un nombre de vecteurs atteints différents. En tout cas, les plus petits nombres possibles de vecteurs qu'on peut atteindre à partir d'un vecteur donné sont essentiellement ceux que j'ai listés ci-dessus : 1, 240, 2160, 6720, 13 440 et 17 280.)

☞ Il faut que je souligne que le fait qu'on obtienne un nombre fini de vecteurs est tout à fait remarquable. Si je faisais juste une toute petite modification à mes règles ci-dessus en autorisant, dans la deuxième opération, de changer le signe d'un nombre quelconque de composantes (au lieu d'exiger un nombre pair), alors n'importe quel vecteur non nul permettrait d'atteindre un nombre infini d'autres vecteurs avec les règles ainsi modifiées. La situation que je décris est véritablement exceptionnelle au sens où les « choses de ce genre » (en fait, les groupes finis de réflexions dans un espace euclidien) se rangent en un certain nombre de familles infinies plus une poignée d'exceptions, et W(E₈) fait partie de ces exceptions. Mais revenons à la situation bien particulière que j'ai considérée.

↑Entry #2502 [older| permalink|newer] / ↑Entrée #2502 [précédente| permalien|suivante] ↑

↓Entry #2492 [older| permalink|newer] / ↓Entrée #2492 [précédente| permalien|suivante] ↓

(samedi)

Approximation diophantienne ; et une bizarrerie mathématique : la constante de Freiman

Il est bien connu que l'ensemble ℚ des rationnels, que je noterai ici p/q sous forme irréductible, est dense dans les réels ℝ, c'est-à-dire que si x∈ℝ, on peut trouver p/q aussi proche qu'on veut de x, ou encore : (pour tout ε>0, il existe p/q tel que) |xp/q| < ε. Là où les choses deviennent plus intéressantes, c'est quand on commence à se demander, donné x∈ℝ, combien il faut payer pour l'approcher par p/q rationnel : autrement dit, si je veux une approximation de qualité ε>0, combien je dois le payer en utilisant un rationnel compliqué, le « compliqué » en question se mesurant par le dénominateur q>0 utilisé (on pourrait prendre la « hauteur » max(|p|,q), ou peut-être |p|+q, mais ça ne changerait pas grand-chose). Le sujet général s'appelle l'approximation diophantienne, et je n'y connais pas grand-chose, mais rappelons quand même les résultats les plus standards à ce sujet.

Si h est une fonction croissante des entiers naturels non nuls vers les réels strictement positifs, je peux dire qu'un réel x est h-approchable par les rationnels (ou simplement h-approchable) lorsqu'il existe des rationnels p/q de dénominateur q arbitrairement élevé tels que |xp/q| < 1/h(q) (formellement : pour tout n entier naturel non nul, il existe p et q entiers premiers entre eux avec qn tels que |xp/q| < 1/h(q)). Il faut y penser comme : en payant avec un dénominateur q j'obtiens une qualité d'approximation h(q). Plus la fonction h grandit vite, plus je demande une bonne approximation, donc plus il est difficile de trouver de tels x. Si h′≥h, ou même simplement si cette inégalité vaut à partir d'un certain rang, alors tout réel h′-approchable est, en particulier, h-approchable. Si h est constante (je demande une qualité d'approximation constante, et je suis prêt à payer arbitrairement cher pour l'avoir) ou simplement bornée, tout réel x est approchable, c'est ce que j'ai rappelé ci-dessus, mais on va voir ci-dessous qu'on peut faire mieux. Dans la pratique, on prendra donc une fonction h de limite ∞ en ∞, sinon la définition n'a guère d'intérêt.

Si h est quelconque (croissante des entiers naturels non nuls vers les réels strictement positifs), il existe toujours des réels h-approchables au sens ci-dessus : c'est une conséquence du théorème de Baire : quel que soit n>0, l'ensemble des x pour lesquels il existe p/q avec qn vérifiant |xp/q| < 1/h(q) est ouvert (puisque c'est une réunion d'intervalles ouverts de largeur 2/h(q) centrés en les p/q) et dense (puisqu'il contient l'ensemble dense des rationnels p/q de dénominateur qn) ; donc (le théorème de Baire assure que) leur intersection est non vide, c'est-à-dire qu'il existe des réels x, et même qu'il existe un ensemble dense, pour lesquels il existent des p/q avec q arbitrairement grand vérifiant |xp/q| < 1/h(q), ce qui signifie exactement qu'ils (les x en question) sont h-approchables. Bref, on peut trouver des réels approchés arbitrairement bien par des rationnels, quelle que soit la qualité h de l'approximation qu'on demande pour un dénominateur donné.

Un autre résultat, dit théorème d'approximation de Dirichlet, est que quel que soit x irrationnel, il existe des p/q de dénominateur q arbitrairement élevé tels que |xp/q| < 1/q² (c'est-à-dire que x est q²-approchable, ceci étant une écriture abusive pour dire h-approchable pour h(q)=q²). La démonstration est vraiment facile mais astucieuse : on considère les parties fractionnaires zk := yk−⌊yk⌋ (entre 0 inclus et 1 exclu) des réels yk := k·x pour 0≤kN entier ; ceci fait N+1 nombres zk, qu'on répartit en les N intervalles de largeur 1/N partitionnant [0;1[ (je veux dire : l'intervalle entre 0 inclus et 1/N exclu, l'intervalle entre 1/N inclus et 2/N exclu, et ainsi de suite jusqu'à l'intervalle entre (N−1)/N inclus et 1 exclu) ; comme il y a plus de réels que d'intervalles, deux d'entre eux, disons zk et z avec k<, qui tombent dans le même intervalle de largeur 1/N, donc ils vérifient |zzk| < 1/N, c'est-à-dire |·x − ⌊·x⌋ − k·x + ⌊k·x⌋| < 1/N, ce qui donne |q·xp| < 1/Nq = k et p = ⌊·x⌋−⌊k·x⌋, et comme 0<q<N (puisque 0≤k<N), on a du coup |xp/q| < 1/(N·q) < 1/q² comme annoncé ; quant au fait qu'on puisse trouver des q arbitrairement grands vérifiant ça, c'est simplement parce que (tant que x est irrationnel !, ce qui n'a pas encore été utilisé), chaque q donné ne peut vérifier |xp/q| < 1/(N·q) que jusqu'à un certain N (à savoir la partie entière de |q·xp|), et donc en prenant un N plus grand que ça, on obtient un p/q forcément différent (je laisse le lecteur remplir les détails).

↑Entry #2492 [older| permalink|newer] / ↑Entrée #2492 [précédente| permalien|suivante] ↑

↓Entry #2477 [older| permalink|newer] / ↓Entrée #2477 [précédente| permalien|suivante] ↓

(vendredi)

Notes de cours de théorie des langages formels

Un des cours (de première année) dont je suis responsable à l'ENST Télécom ParisTech ParisSaclay NewUni l'école où j'enseigne concerne la théorie des langages [formels], c'est-à-dire les langages rationnels, expressions rationnelles et automates finis, les langages algébriques et grammaires hors-contexte, et pour finir une toute petite introduction à la calculabilité (sujet dont je me suis déjà plaint, et plus d'une fois, de la difficulté à l'enseigner proprement). J'ai tout juste fini d'en réécrire le poly, complètement en retard puisque le cours a déjà commencé et qu'il va falloir du temps pour l'impression.

Comme je suis partisan de l'ouverture et de la disponibilité des documents d'enseignement, voici les notes en question. Si certains de mes lecteurs sont intéressés par ce sujet, ou veulent m'aider à traquer les erreurs qui demeurent certainement nombreuses, n'hésitez pas à me faire parvenir vos commentaires (mais comme je mets à jour ce lien régulièrement, pensez à recopier la ligne Git de la première page pour que je sache à quelle version vous faites référence).

(Il va de soi que le contenu lui-même, qui est le résultat de divers compromis, que ce soit sur le temps imparti ou sur l'équilibre entre mathématiques et informatique pratique, est souvent boiteux. Ce n'est pas la peine de me faire des remarques à ce sujet ; enfin, ce n'est pas qu'elles soient mal venues, c'est juste qu'elles ne seront pas suivies d'effets.)

↑Entry #2477 [older| permalink|newer] / ↑Entrée #2477 [précédente| permalien|suivante] ↑

↓Entry #2462 [older| permalink|newer] / ↓Entrée #2462 [précédente| permalien|suivante] ↓

(jeudi)

Petit guide bordélique de quelques ordinaux intéressants

Méta / avant-propos

L'écriture de cette entrée aura été assez chaotique, et un peu un échec : j'ai changé plusieurs fois d'avis sur ce que je voulais y mettre, et du coup le résultat est parti un peu dans tous les sens. Cela faisait longtemps que je me disais que je devrais écrire quelque chose sur des ordinaux remarquables (comme une suite de l'entrée d'introduction à leur sujet), j'y ai repensé en écrivant l'entrée sur la programmation transfinie, je m'y suis remis en reprenant (et en copiant-collant) des bouts de choses que j'avais écrites antérieurement et laissées de côté, mais ça s'est enlisé. Je commence par expliquer pourquoi — et dans une certaine mesure, comment lire cette entrée.

Ajout : j'aurais sans doute ajouter quelque part un lien vers ce billet passé où je parle de l'aspect psychologique de pourquoi les ordinaux me fascinent.

Mon idée initiale était d'aider le lecteur à situer un certain nombre d'ordinaux intéressants (dont j'ai pu parler par le passé ou dont je pourrais parler ultérieurement) en les classant dans l'ordre (ce qui est bien avec les ordinaux, c'est qu'ils sont, justement, bien ordonnés) : j'ai déjà écrit cet autre texte à ce sujet (lié depuis l'entrée précédente), mais il est un plutôt technique, son but étant surtout de rassembler des pointeurs vers la littérature mathématique publiée, alors qu'ici je voulais donner un aperçu plus intuitif de (certains de) ces ordinaux intéressants.

Je me suis dit que j'allais faire un plan en trois parties, que j'appellerai domaines : (1) les ordinaux calculables (et a fortiori dénombrables), c'est-à-dire les ordinaux strictement inférieurs à l'ordinal de Church-Kleene ω₁CK, (2) les ordinaux non calculables mais néanmoins dénombrables, c'est-à-dire ≥ω₁CK mais néanmoins <ω₁ (qui, en gros, ne sont intéressants que s'ils sont « admissibles »), et (3) les ordinaux non dénombrables (qui, en gros, ne sont intéressants que s'ils sont des cardinaux). Ce plan a le bon goût de permettre d'insister sur le fait que, par exemple, certains ordinaux, bien que monstrueusement grands et complexes à définir, sont néanmoins encore calculables (domaine (1), c'est-à-dire <ω₁CK), ce qui donne une petite idée de combien ω₁CK est gigantesque.

Mais ce plan a aussi l'inconvénient que l'ordre naturel sur les ordinaux (la taille, quoi) n'est pas du tout la même chose que l'ordre d'importance, d'intérêt, ou de difficulté à les définir (je peux définir ω₁ en disant que c'est le plus petit ordinal indénombrable, ou que c'est l'ensemble des ordinaux dénombrables triés par ordre de taille : ça ne laisse peut-être pas comprendre à quel point il est riche et complexe, mais au moins, c'est une définition nette et précise, alors que certains ordinaux beaucoup plus petits, quoique structuralement moins riches, sont beaucoup plus subtils à définir, puisqu'on veut les définir, justement, de façon beaucoup plus précise et complète). Plus subtilement, d'ailleurs, mon plan par taille des ordinaux a aussi l'inconvénient que l'ordre de taille n'est même pas l'ordre de dépendance logique des ordinaux : c'est ce phénomène qu'on appelle imprédicativité qui veut qu'on fasse appel, pour construire certains ordinaux, à des ordinaux encore plus grands ; ainsi, la construction de l'ordinal de Bachmann-Howard (qui est <ω₁CK, donc dans le domaine (1) de mon plan) fait appel à une « fonction d'écrasement », qui présuppose de savoir ce que c'est que ω₁CK ou peut-être ω₁ (l'un ou l'autre peut servir, et on lui donne le nom de Ω dans les notations), et c'est encore pire dans la construction d'ordinaux calculables encore plus grands, qui nécessitent d'invoquer des ordinaux récursivement grands ou de grands cardinaux.

Je le savais, bien sûr, mais je pensais pouvoir contourner ces difficultés en fournissant au fur et à mesure des informations minimales sur les grands ordinaux des domaines (2) et (3) alors que je décrivais le domaine (1), quitte à y revenir plus tard. Finalement, c'est une très mauvaise idée, et cette partie (1) a beaucoup trop gonflé et est devenue, du même coup, assez illisible. (Un autre problème est que ce qui rend les ordinaux calculables vraiment intéressants est leur lien avec certaines théories logiques, et il faudrait vraiment beaucoup de place pour expliquer ce que sont exactement des théories telles que la « théorie des ensembles de Kripke-Platek », l'« arithmétique du second ordre limitée à la Δ¹₂-compréhension », la « théorie des définitions inductives ».) En même temps que ça, j'ai commencé à en avoir vraiment marre d'écrire sur des ordinaux de plus en plus techniques à expliquer. Du coup, j'ai calé sur la partie (1), ce qui casse vraiment l'intention initiale, puisque j'avais surtout envie (pour rester sur la lancée de la programmation transfinie) d'essayer de dire des choses sur les ordinaux nonprojectibles, stables et compagnie, qui sont résolument dans la partie (2).

Au final, c'est un peu n'importe quoi : cette entrée me fait l'effet d'une moussaka géante où on ne comprend plus rien. Mais je pense qu'il y a quand même un certain intérêt à ce que je publie ce « n'importe quoi » plutôt que de le ranger dans mes cartons, c'est-à-dire dans le vaste cimetière des entrées que j'ai commencées et jamais publiées. Car après tout, ce que j'écris est correct (enfin, je crois), et même si vers la fin je lance dans l'air de plus en plus de termes non définis faute de patience pour les définir, ou que je pars complètement dans l'agitage de mains, certains en tireront quand même quelque chose.

Finalement, les différentes sous-parties de cette entrée sont, je l'espère, assez indépendantes les unes des autres, donc comme d'habitude, et même plus encore que d'habitude, j'encourage à sauter les passages qu'on trouve incompréhensibles ou trop techniques (beaucoup d'entre eux ne servent, finalement, à rien).

Comme expliqué ci-dessus, je vais d'abord faire quelques remarques générales sur les ordinaux intéressants, expliquer plus précisément le plan que j'avais en tête, puis parler d'ordinaux calculables (i.e., <ω₁CK, le domaine (1)), et m'arrêter en queue de poisson.