- L’arithmétique de Peano (PA) peut exprimer des processus de calcul mécaniques, donc l’extinction de toute suite de Goodstein individuelle est démontrable dans PA
- Grâce à la forme normale de Cantor et à la notation héréditaire des ordinaux, on peut représenter les suites de Goodstein et leur décroissance, ce qui permet de construire des preuves de longueur finie
- Par induction (induction forte / induction transfinie), il est possible d’étendre séparément les preuves jusqu’à certains degrés d’ordinaux
- PA peut démontrer, pour tout entier naturel n, que « G(n) atteint 0 », mais une preuve globale du théorème de Goodstein (pour tout n) est impossible
- Avec PA, on peut suffisamment implémenter l’encodage du calcul, des structures de données (List, Pair, etc.), et même du langage de programmation (Lisp) lui-même, ainsi que l’encodage de son propre processus de preuve
Introduction et contexte du problème
- Cet article explique que l’arithmétique de Peano (PA) peut prouver que, pour chaque n, la suite de Goodstein « atteint 0 » (
G(n) terminates)
- Cela peut sembler évident pour les logiciens, mais le texte l’explique du point de vue de l’encodage du calcul afin qu’un programmeur puisse le comprendre
- Pour chaque cas d’une suite de Goodstein, il est possible de construire une routine de preuve concrète à l’intérieur de PA
Ordinaux et suites de Goodstein
- Les ordinaux (Sets as Ordinals) sont construits à la manière de Von Neumann
- 0 est l’ensemble vide, 1 est {0}, 2 est {0,1}, ω est {0,1,2,…}, ω+1 est {0,1,2,…,ω}, etc., avec un ordre bien défini
- Les suites de Goodstein sont décrites via une notation héréditaire en base utilisant la forme normale de Cantor
- Exemple : ω^ω est
((1,ω)), c’est-à-dire ((1,(1,1)))
- L’ordre
< est déterminé par une comparaison lexicographique sur l’ordinal et le coefficient de chaque terme
Induction et induction transfinie
- Induction dans l’arithmétique de Peano : si c’est vrai pour 0, et vrai de n à n+1, alors c’est vrai pour tous les entiers naturels
- L’induction forte est elle aussi démontrable dans PA
- Induction transfinie : dans ZFC, etc., on peut l’étendre à des ordinaux infinis et l’appliquer aux nombres écrits en forme normale de Cantor
- Théorème 1 : toute suite décroissante en forme normale de Cantor est nécessairement finie
- Théorème 2 : on peut appliquer l’induction transfinie aux nombres en forme normale de Cantor
Induction transfinie dans PA et longueur des preuves pour les suites de Goodstein
- PA peut générer une preuve de l’extinction d’une suite de Goodstein pour un n arbitraire
- On peut construire la preuve selon la hauteur de tour m=O(log* n) (logarithme itéré) de la forme normale de Cantor
- En combinant m preuves à chaque étape, on obtient une longueur totale de preuve en O(m^2), ou en O(m log m) si l’on introduit une notation spéciale (
ω[m])
- En revanche, une preuve du théorème complet de Goodstein (pour tout n) est impossible dans PA (pas d’induction transfinie jusqu’à ε0)
- Si c’était possible, on pourrait aussi démontrer la cohérence de PA, ce qui entrerait en conflit avec le second théorème d’incomplétude de Gödel
Encodage des programmes et des structures de données dans PA
- PA permet d’encoder suffisamment le calcul / les programmes / les structures de données (nombres, paires, listes et toute autre structure)
- On peut ainsi implémenter diverses fonctionnalités, par exemple :
- logique de base et opérations (
+, *, pow, //, %, min, max, etc.)
- pattern matching et branchements conditionnels (
if, cond, etc.)
- encodage d’un nombre en deux nombres (paire), puis extension répétée de paires vers des listes et d’autres structures plus complexes (listes récursives, arbres, texte, etc.)
- Grâce à cet encodage des structures de données, il est possible de construire jusqu’à un interpréteur de machine virtuelle / langage de programmation arbitraire (Lisp, etc.)
Bootstrap et encodage vers Lisp
- En prenant Lisp comme exemple, le texte explique comment implémenter des opérations numériques et logiques de base, des structures de données, ainsi qu’un interpréteur de langage de programmation
- Toute la structure de Lisp (mappage commandes/arguments, formes spéciales, macro, etc.) peut être implémentée dans PA au moyen de combinaisons appropriées de fonctions
- Plus encore, le processus de preuve de PA lui-même, les procédures de preuve logique et les structures auto-référentielles peuvent tous être encodés et implémentés symboliquement dans PA
Encodage de la logique elle-même dans PA
- En logique mathématique, il est possible d’encoder le processus de preuve de la logique du premier ordre comme des données numériques dans PA
- Chaque étape de preuve / proposition / règle d’inférence / vérification de validité d’une preuve peut être reconnue et traitée comme une série de fonctions numériques ou de traitements de listes
- Ce type d’encodage métathéorique et auto-référentiel mène jusqu’aux preuves de l’incomplétude de Gödel et du problème de l’arrêt
Conclusion
- Le calcul, les structures de données, les programmes et même les processus de preuve logique peuvent tous être suffisamment encodés, prouvés et interprétés dans PA
- Par conséquent, toute suite de Goodstein arbitraire (pour un n donné, extinction de G(n)) peut être prouvée concrètement à l’intérieur de PA
- En revanche, une preuve affirmant, pour le théorème complet de Goodstein (pour tout n), que « PA démontre le théorème de Goodstein dans PA » est impossible en raison des limites de la logique
- Du point de vue d’un programmeur, PA constitue une base logique complète capable d’encoder le calcul lui-même
1 commentaires
Commentaire Hacker News
defun not (x) (if x false true)). Dès que quelqu’un commence à utiliser des parenthèses, j’ai le réflexe de vérifier qu’elles sont bien fermées. Puis j’ai éclaté de rire en voyant plus loin la remarque disant qu’"il est facile de programmer un ordinateur pour vérifier si les parenthèses sont équilibrées". Ce genre de blague m’a vraiment fait rire, et le commentaire; After a while, you stop noticing that stack of closing parens.dans la section "Basic Number Theory" m’a aussi marqué. Cela faisait longtemps que je n’avais pas replongé dans Lisp, et j’ai trouvé l’article vraiment amusant.\omega.omega-consistent), on pourrait démontrer le théorème de Goodstein, et peut-être aussi obtenir l’induction transfinie jusqu’àepsilon_0. EDIT : peut-être même que "PA est cohérent" suffirait ?Con(PA)n’est pas suffisant, mais qu’aucune formule universellement quantifiée arbitraire ne suffit non plus. Voir cette réponse pertinente sur Math StackExchange. Concernant votre première question, je suis curieux de savoir comment on encode exactement l’oméga-cohérence comme formule de PA ; cela ne me vient pas immédiatement à l’esprit.Test oméga-cohérent, cela signifie que "T + RFN_T +l’ensemble de toutes les formules vraies est cohérent", ce qui se lit comme équivalent à "T + RFN_Test vrai".PA + "PA est cohérent"permettrait qu’il existe un modèle dans lequel le théorème de Goodstein est vrai pour les entiers naturels standards, tout en autorisant aussi un modèle dans lequel il est faux pour un certain entier non standardN. Il me semble qu’un énoncé plus fort, comme l’oméga-cohérence, exclurait ce genre de cas.PA +induction transfinie jusqu’àepsilon_0prouve PA lui-même. J’ai l’impression quePA + "PA est cohérent"devrait permettre de démontrer l’induction transfinie jusqu’àepsilon_0.PA + PA est cohérentne suffit pas. Comme ChatGPT a sans doute ingurgité énormément d’ouvrages de logique, je suis tenté de lui faire confiance sur ce point.X", alors PA démontre aussiXlui-même. Le point important n’est pas l’existence de modèles non standards, mais le fait que le modèle standard des entiers naturels est bien un modèle de PA. Donc si "PA prouve qu’il prouveX", cela produit effectivement une preuve correspondant à un entier standard fini, et on peut s’en servir pour construire dans PA une vraie preuve deX.forall n, G(n)" et "PA prouveforall n, Provable(G(n))". Je suis plutôt faible en logique, donc si quelqu’un peut m’expliquer concrètement pourquoi prouverforall n, Provable(P(n))ne permet pas de prouverProvable(forall n, P(n)), je lui en serais reconnaissant.X’, alors PA prouveX" n’est pas correct. On peut définir dans PA une fonction qui parcourt toutes les preuves possibles, et j’ai d’ailleurs esquissé cette approche à la fin de ma réponse. À partir de là, on peut aussi définir des fonctions commewill-returnetopposite-return, ce qui rejoint la preuve standard du problème de l’arrêt. Si l’on considère le casopposite-return(opposite-return, opposite-return), alors si PA prouve queopposite-returnretourne, il prouve aussi qu’en fait il ne retourne pas ; et inversement, s’il prouve qu’il ne retourne pas, il prouve qu’il retourne. Si PA adoptait un principe plus fort du type "tout ce qui est démontrable est effectivement démontrable", on tomberait immédiatement sur le second théorème d’incomplétude de Gödel, ce qui signifierait que PA est contradictoire. Il faut donc absolument distinguer "PA prouve" de "PA prouve qu’il prouve".Natà base dezero/succ(comme on en voit dans Lean ou Rocq). La personne s’est demandé : "Est-ce que cela suffit à lui seul ?", "A-t-on vraiment besoin de l’arithmétique de Peano ?", "Existe-t-il quelque chose d’encore plus primitif que les types de données inductifs ?" Cela m’a rappelé qu’il est utile de ne pas considérer l’arithmétique de Peano comme une évidence essentielle, mais simplement comme un choix de conception parmi d’autres.Π,Σ,=,Ω).