Parce que beaucoup de problèmes réellement pratiques sont le problème d’arrêt déguisé. Une solution à ces problèmes résout le problème persistant.
Vous voulez un compilateur qui trouve le code machine le plus rapide possible pour un programme donné? En fait, le problème d’arrêt.
Vous avez JavaScript, avec certaines variables à un niveau de sécurité élevé et d'autres à un niveau de sécurité bas. Vous voulez vous assurer qu'un attaquant ne peut pas accéder aux informations de haute sécurité. C’est aussi le problème qui s’arrête.
Vous avez un analyseur syntaxique pour votre langage de programmation. Vous le changez, mais vous voulez vous assurer qu'il analyse toujours tous les programmes qu'il utilisait auparavant. En fait, le problème d’arrêt.
Vous avez un programme anti-virus et vous voulez savoir s'il exécute une instruction malveillante. En fait, juste le problème d’arrêt.
En ce qui concerne l'exemple wikipedia, oui, vous pouvez modéliser un ordinateur moderne comme une machine à états finis. Mais il y a deux problèmes avec cela.
Chaque ordinateur serait un automate différent, en fonction du nombre exact de bits de RAM. Cela n'est donc pas utile pour examiner un morceau de code particulier, car l'automate dépend de la machine sur laquelle il peut s'exécuter.
Vous aurez besoin de états si vous avez n bits de RAM. Donc, pour votre ordinateur moderne de 8 Go, cela représente . C'est un nombre si grand que wolfram alpha ne sait même pas comment l'interpréter. Quand je fais il est indiqué qu'il a chiffres décimaux. Ceci est clairement beaucoup trop grand pour stocker dans un ordinateur normal.2 32000000000 2 10 9 3000000002n2320000000002dix9300000000
Le problème de Halting nous permet de raisonner sur la difficulté relative des algorithmes. Cela nous laisse savoir que certains algorithmes n'existent pas, que parfois, tout ce que nous pouvons faire est de deviner un problème et de ne jamais savoir si nous l'avons résolu.
Si nous n'avions pas le problème bloquant, nous chercherions toujours l'algorithme magique de Hilbert qui entre les théorèmes et fournit des résultats, qu'ils soient vrais ou non. Nous savons maintenant que nous pouvons cesser de chercher et que nous pouvons concentrer nos efforts sur la recherche d'heuristiques et de méthodes optimales pour résoudre ces problèmes.
MISE À JOUR: Juste pour aborder quelques problèmes soulevés dans les commentaires.
@Tyler Fleming Cloutier: Le problème "absurde" se pose lorsqu'il est prouvé que le problème qui nous arrête est indécidable, mais le cœur de l'indécidabilité réside dans un espace de recherche infini. Vous recherchez un objet avec une propriété donnée, et s'il n'en existe pas, il n'y a aucun moyen de savoir quand vous avez terminé.
La difficulté d'un problème peut être liée au nombre de quantificateurs dont il dispose. Essayer de montrer qu’il existe ( ) un objet avec une propriété arbitraire, vous devez chercher jusqu’à ce que vous en trouviez un. S'il n'en existe pas, il n'y a aucun moyen (en général) de le savoir. Il est difficile de prouver que tous les objets ( ) ont une propriété, mais vous pouvez rechercher un objet sans la propriété permettant de l'invalider. Plus il y a d'alternations entre forall et existe, plus le problème est difficile.∀∃∀
Pour plus d'informations à ce sujet, voir la hiérarchie arithmétique . Tout ce qui est au-dessus de est indécidable, bien que le niveau 1 soit semi-décidable.Σ00= Π00
Il est également possible de montrer qu'il existe des problèmes indécidables sans utiliser un paradoxe absurde comme le problème Halting ou le paradoxe de Liars. Une machine de Turing peut être codée en utilisant une chaîne de bits, c'est-à-dire un entier. Mais un problème peut être codé sous forme de langage, c’est-à-dire un sous-ensemble des entiers. On sait qu'il n'y a pas de bijection entre l'ensemble des entiers et l'ensemble de tous les sous-ensembles des entiers. Il doit donc y avoir des problèmes (langages) auxquels aucune machine de Turing n'est associée (algorithme).
@Brent: oui, cela admet que c'est décidable pour les ordinateurs modernes. Mais c'est décidable pour une machine spécifique. Si vous ajoutez un lecteur USB avec de l'espace disque, ou la possibilité de le stocker sur un réseau, ou autre, la machine a changé et le résultat ne tient pas.
Il faut aussi dire qu'il y aura de nombreuses fois où l'algorithme dit "ce code va s'arrêter" parce qu'il échouera et qu'il manquera de mémoire, et que l'ajout d'un seul bit de mémoire supplémentaire le ferait réussir et donner un résultat différent.
Le problème, c’est que les machines de Turing n’ont pas une quantité de mémoire infinie. Il n'y a jamais une époque où une quantité infinie de symboles sont écrits sur la bande. Au lieu de cela, une machine Turing a une mémoire "illimitée", ce qui signifie que vous pouvez continuer à avoir plus de sources de mémoire quand vous en avez besoin. Les ordinateurs sont comme ça. Vous pouvez ajouter de la RAM, des clés USB, des disques durs ou un stockage réseau. Oui, vous manquez de mémoire lorsque vous êtes à court d'atomes dans l'univers. Mais avoir une mémoire illimitée est un modèle beaucoup plus utile.