Les mathématiques sont hantées
(overreacted.io)- Lean est un langage de programmation conçu pour formaliser les mathématiques et permettre aux mathématiciens de traiter les théorèmes mathématiques comme du code
- Les utilisateurs rédigent des théorèmes, des preuves, des axiomes et autres sous forme de code, et les preuves progressent via un ensemble d'instructions appelé tactic
- Il est possible de fermer provisoirement une preuve incomplète avec
sorry, mais cela constitue une fausse preuve comparable auanyde TypeScript - Si l’on ajoute de mauvais axiomes (par exemple
2 = 3), cela peut entraîner une contradiction logique et la possibilité de prouver toute affirmation - Lean ne tire des conclusions que sur la base des axiomes choisis et du cadre logique de preuve adopté, ce qui donne une portée cruciale au maintien de la validité mathématique
Lean : traiter les mathématiques comme du code
- Lean est un langage de programmation spécialisé dans la formalisation des mathématiques
- Grâce à Lean, les mathématiciens peuvent exprimer les mathématiques en code et structurer leurs théorèmes et preuves afin de les partager et de collaborer
- Il annonce un futur où une grande partie des connaissances mathématiques humaines pourrait devenir vérifiable mécaniquement et combinable sous forme de code
Premiers pas dans les preuves Lean
- Il est possible de déclarer un théorème simple dans Lean comme
theorem two_eq_two : 2 = 2 := by sorry - Lorsque la preuve n’est pas entièrement terminée, on utilise
sorry, mais ce n’est qu’un moyen provisoire, pas une preuve réellesorrypasse la vérification de preuve de Lean, mais n’est pas logiquement fiable
- Pour une preuve complète, on utilise des
tacticcommerfl(réflexivité) afin de démontrer des égalités évidentes comme2 = 2 - Les résultats déjà prouvés peuvent être réutilisés dans d’autres théorèmes avec
exact, ce qui met en avant la modularité
Axiomes et contradictions : quand les mathématiques sont hantées
- Si l’on ajoute un axiome tel que
axiom math_is_haunted : 2 = 3, Lean le considère comme vrai - Cet axiome peut ensuite être utilisé dans les preuves, et il devient même possible de démontrer des conclusions mathématiquement absurdes (par exemple
2 + 2 = 6) - Grâce à la tactic
rewrite, on peut remplacer2par3puis terminer la preuve d’égalité avecrfl - Si un axiome incorrect induit une contradiction, Lean bascule dans un état où toutes les propositions deviennent démontrables (effondrement logique)
- Historiquement, au début du XXe siècle, des paradoxes de type Russell ont conduit à des remises en question fondamentales de la base des systèmes axiomatiques
- Ainsi, Lean montre combien le choix des axiomes est déterminant pour préserver la validité d’un système logique
Lean en tant que vérificateur de preuves
- Si les axiomes sont bien choisis et que Lean est logiquement correct, il fournit des conclusions théoriquement fiables
- Des égalités simples aux théorèmes extrêmement complexes (par exemple le dernier théorème de Fermat), tout y est vérifié selon les mêmes principes
- Les grands théorèmes se construisent en accumulant de manière répétée des preuves de sous-structures, comme les branches d’un arbre qui se construit progressivement
- En exemple, un projet de formalisation du Théorème de Fermat dans Lean est en cours, avec l’objectif de parvenir à une preuve officielle sans recours à des
sorry
Le plaisir d'apprendre Lean
- Les preuves Lean sont une combinaison créative entre code et mathématiques
- Au début, il s’agit d’apprendre à démontrer des propositions simples, puis progressivement de construire rigoureusement une mathématique de plus en plus complexe et profonde
- Les tutoriels officiels et les ressources communautaires (telles que Natural Numbers Game, Mathematics in Lean, etc.) sont adaptés pour démarrer
- Avec Lean, on formalise directement sa logique et on redécouvre la beauté des idées et des raisonnements subtils
- L’article se conclut sur le fait que Lean procure une joie particulière à certains profils de personnes, même sans raison apparente
1 commentaires
Réactions sur Hacker News
two_eq_tworessemble à une fonction me paraît étrange ; comme il n’a pas d’arguments, il ressemble davantage à une constante — même si, oui, une constante est aussi une fonction sans arguments ; il me semblerait plus convaincant de montrer quelque chose comme ci-dessous avecx_eq_x, puis de l’appliquer comme une fonction dans2_eq_2Ici,x_eq_xressemble bien à une fonction, et c’est effectivement ainsi qu’il est utilisé dans2_eq_2xrenvoie une preuve dex = x— m’est encore un peu étrangère, et cela mérite un traitement à part entière ; j’en parlerai dans un prochain articlerflet autres) sont trop englobantes, et qu’il est difficile d’en saisir le sens exact même avec les tutoriels ; par exemple, en C on peut suivre les changements d’état jusqu’au niveau des bits, alors qu’avec Lean tout me semble plus flou ; et la syntaxe de la tacticrewrite (rw)ne me paraît pas naturelleA = BetP(A,A)et je voulais passer àP(A,B), maisrewritene marchait pas pour des raisons difficiles à expliquer — sans doute à cause d’une définition structurelle intermédiaire ; à l’inverse, Metamath et la base de données set.mm imposent des preuves entièrement concrètes, sans tactics du tout, avec uniquement des règles d’inférence commeax-mp; mais ce n’est pas simple non plus, parce qu’il faut alors mémoriser tout un ensemble de lemmes utilitairesrewritene te paraît pas naturelle, je serais curieux de savoir à quoi ressemblerait, pour toi, une syntaxe naturellerewriteseraient plus fondamentales que l’addition ; Lean fournit l’addition de base, mais on a quand même l’impression qu’il faut écrirerflourewriteà chaque fois ; il existe peut-être dans Lean une sorte de prelude qui automatise davantage celarw [x]; on peut bien voir l’état ligne par ligne dans l’éditeur, mais devoir cliquer sans cesse casse le fil ; ce serait pareil en Python si on ne voyait pas l’indentation et la structure des blocs, et qu’il fallait cliquer pour comprendre ; cela vient peut-être du nombre limité de commandes en début de jeu, mais je me demande si, dans un environnement Lean complet, la lecture devient plus fluideby ...que les détails où les tactics sont pertinentes ; je ne sais pas si Lean a quelque chose d’équivalent, mais cela peut au moins fournir des mots-clés de recherche ou des idées de questions à poser sur le forum Leanintrosignifie l’entrée dans un quantificateur, qu’unconstructorsignifie une division du goal, etc. ; au fond, les tactics sont des macros ou une DSL qui construisent un arbre de preuve (term tree) ; quand je lis ce code, j’ai l’impression de regarder des opérations sur un arbre — découper des branches, remplir des emplacements dans un certain ordre, etc. ; il reste vrai que, pour connaître précisément les assertions intermédiaires, il faut encore cliquer ; mais une bonne preuve, fondée sur une bonne idée, peut se lire de façon aussi claire qu’un développement logique dans un article ; ceux qui veulent transmettre leur intention choisissent donc des noms lisibles, un déroulé clair, extraient de petits lemmes, et commencent par énoncer les hypothèses avant de les résoudre avec un code de preuve court ; inversement, les parties fastidieuses pour la machine mais évidentes pour un mathématicien sont souvent « golfées » ; ce style golf raccourcit souvent le code tout en ne traitant que les points que l’humain voit intuitivement ; en résumé, la structure de lecture dans Lean est implicite, mais on peut la rendre plus claire, et plus on maîtrise les tactics, plus on perçoit cette structure sans cliquer ; souvent, il suffit même de parcourir les noms des lemmes pour saisir le flux général et reconstruire facilement l’ordreclojure core.logic, et j’ai été refroidi par le faible intérêt et la petite taille de la communauté, donc j’hésite à me lancer trop facilementLa communauté Lean se retrouve beaucoup sur Zulip, et tu peux consulter divers fils de discussion utiles sur le canal Machine-Learning-for-Theorem-Proving
sorrylaissés dans les exercices (mes solutions sont ici)sorry) ou l’ajout continu de nouveaux axiomes ; par exemple, peut-on vérifier qu’« une proof n’utilise en aucune manièresorry» ou qu’elle « ne dépend que d’un ensemble fixé d’axiomes » ?#print axioms some_theoremmentionné vers la fin de l’article répond à cela, non ? Cela permet de voir si la preuve dépend directement ou indirectement desorryou d’axiomes non examinésprint axioms, on peut vérifier qu’aucun axiome supplémentaire n’a été ajouté ; et on peut aussi regarder si cela compile sans warning ni erreur ; l’utilitaire SafeVerify détecte également certaines astuces trouvées par des systèmes de RL