Pourquoi vraiment le problème de l’arrêt est-il si important?


149

Je ne comprends pas pourquoi le problème de l' arrêt est si souvent utilisé pour écarter la possibilité de déterminer si un programme est interrompu. Le [article] [1] de Wikipedia explique correctement qu'une machine déterministe à mémoire finie arrêtera ou répétera un état antérieur. Vous pouvez utiliser l’algorithme qui détecte si une liste chaînée est mise en boucle pour implémenter la fonction d’arrêt avec une complexité d’espace de O (1).

Il me semble que la preuve du problème de l’arrêt n’est rien davantage qu’une prétendue «paradoxe», une contradiction de référence (au moins cyclique) de la même manière que le paradoxe du menteur. La seule conclusion à tirer est que la fonction d’arrêt est susceptible de poser de telles questions mal formées.

Donc, en excluant les programmes paradoxaux, la fonction d’arrêt est décidable. Alors, pourquoi la considérons-nous comme une preuve du contraire?

4 ans plus tard : quand j'ai écrit ceci, je venais de regarder cette vidéo . Un programmeur obtient certains programmes, doit déterminer ceux qui se terminent, et la vidéo explique pourquoi c'est impossible. J'étais frustré parce que je savais qu'avec des programmes arbitraires, il était possible que le protagoniste puisse prouver s'il était terminé. Le concept de généralité a été perdu d'une manière ou d'une autre. C'est la différence entre dire "on ne peut pas prouver que certains programmes se terminent" et "on ne peut prouver qu'un programme se termine." De nombreux algorithmes sont formellement démontrés pour le faire. Le défaut de faire cette distinction, par chacune des références que j'ai trouvées en ligne, a été la raison pour laquelle je suis arrivé au titre de cette question. Pour cette raison, j'apprécie vraiment la réponse cela redéfinit la fonction d'arrêt comme ternaire au lieu de booléen.


16
"une machine déterministe à mémoire finie" est "ennuyeux" puisqu'il ne s'agit que d'un automate fini; ceux-ci ne sont pas utiles pour la modélisation du calcul en général. En ce qui concerne le problème d’arrêt: c’est un exemple spécifique pour une fonction qui n’est pas calculable (Turing). Si vous êtes satisfait d'une preuve non constructive, vous n'en "avez pas besoin". Il a toujours une pertinence historique, cependant.
Raphaël

16
Cela dit, votre question semble mal informée. Vous voudrez peut-être approfondir vos principes fondamentaux de la théorie de la calculabilité (ce qui remettra en question votre intuition qui est informée par la réalité et non par les modèles abordés ici). Voir nos questions de référence pour un début. Si vous avez besoin de plus de "preuves" que votre intuition (au sens théorique du terme) soit fatalement viciée, allez lire cette question .
Raphaël

12
"Vous pouvez utiliser l'algorithme qui détecte si une liste chaînée est mise en boucle pour implémenter la fonction Halting avec une complexité d'espace de O (1)", mais si vous souhaitez résoudre le problème pour un ordinateur disposant de 2 Go de stockage, vous aurez besoin de plus de 2 ^ 2000000000 étapes et un ordinateur plus grand.
user2357112

11
Il y a longtemps, je discutais avec un ami du problème de blocage et quelqu'un assis à proximité m'a demandé: "Quel est le problème de blocage, est-ce important?" et mon ami s’est tourné vers lui et a dit: "si nous pouvions résoudre le problème, nous pourrions construire des villes sur des nuages". C'est vrai.
Francis Davey

8
@emory L'affirmation est volontairement vraie: P => Qest vraie pour tout Q, si nous savons que Pc'est faux (et nous savons que le problème de Halting n'est pas résoluble). Francis pourrait tout aussi bien dire: "Si nous pouvions résoudre le problème, nous pourrions trouver un remède à la mort elle-même". C'est la façon dont l'implication logique est définie.
Amalloy

Réponses:


217

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.

  1. 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.

  2. 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 3000000002n2320000000002109300000000

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.


4
@Mehrdad Pour toute définition raisonnable de "code machine le plus rapide possible pour un programme donné", la question est logique et la réponse est "Il ne peut y avoir aucun compilateur de ce type".
David Richerby

13
Cela fonctionne également pour trouver le code machine le plus court possible, celui qui a le moins d'accès mémoire, etc. etc. Pour les programmes généraux, trouver une transformation optimale est indécidable. C'est fondamentalement le théorème de Rice.
Jmite

4
En corollaire au point de toujours rechercher l'algorithme magique de Hilbert, sans le concept étroitement apparenté d'équivalence de Turing, nous serions toujours en train de nous demander si les gotos ou le code auto-modificateur permettent un calcul plus puissant, à la recherche de formes de matériel plus puissantes , et les arguments sur le meilleur langage de programmation seraient même beaucoup plus subjectifs qu’aujourd’hui.
Sdenham

3
Il arrive même dans des endroits inattendus. Vous voulez écrire un compilateur C ++ qui rejette tous les programmes non valides tout en compilant ceux qui sont valides? Résolvez d’abord le problème - La métaprogrammation des modèles C ++ est Turing-complete. Indiquer si vos modèles sont valides ou non est généralement résolu.
Mark

7
@ Merhrdad: Votre exemple de "simulation du programme informatique complet" est un excellent exemple de la raison pour laquelle le problème est si important. Pour certains programmes, simuler le programme n'est pas aussi simple qu'il n'y paraît (pour des exemples, regardez la page wikipedia sur l'arrêt). Si le problème peut être trompeur sous cette forme, vous pouvez imaginer à quel point il est difficile d'expliquer à une personne une forme plus cachée (telle que le problème des antivirus)
Cort Ammon

49

Concrètement, c'est important car cela vous permet de dire à vos chefs ignorants que "ce que vous demandez est mathématiquement impossible".

Le problème d’arrêt et divers problèmes NP-complets (par exemple, le problème du voyageur de commerce) se posent souvent sous la forme «Pourquoi ne pouvez-vous pas créer un programme qui fait X?» Et vous devez pouvoir donner une explication de pourquoi il est impossible ou infaisable dans la vie restante de l'univers.

Notez qu'il est possible de concevoir un langage qui n'est pas complet de Turing et qui peut donc être analysé en interdisant la récursion et l'itération sans limites.



16
Eh bien, @bishop, sauf que Flickr a fait l’impossible .
Francisco Presencia

8
il est possible de concevoir un langage qui n'est pas Turing-complete : Exemple d'un langage complet utile non-Turing: SQL (en réalité un SQL simplifié). L'intégralité de Turing ajouterait automatiquement une non-terminaison à la langue, ce que vous ne voulez probablement pas lorsque vous exécutez une requête de base de données. (Bien que je crains que toutes les implémentations SQL modernes offrent de toute façon une complétude complète)
Bakuriu

8
@FranciscoPresencia: ils ont utilisé une équipe de recherche, donc le point général tient toujours.
RemcoGerlich

4
@MooingDuck: Flickr ne choisit pas entre les parcs et les oiseaux, il (tente de) confirmer l'un ou l'autre ou les deux. OU pas XOR.
Rickster

45

Vous pouvez utiliser l’algorithme qui détecte si une liste chaînée est mise en boucle pour implémenter la fonction d’arrêt avec une complexité d’espace de O (1).

Pour ce faire, vous devez stocker au moins deux copies de l'état partiel du programme en mémoire, plus la surcharge du programme de contrôle. Ainsi, sur un ordinateur donné, vous ne pouvez pas tester tous les programmes pouvant être exécutés sur cet ordinateur, mais uniquement les programmes exécutés sur un ordinateur plus petit avec moins de la moitié de la mémoire.

Le problème d’arrêt pour un ordinateur de taille finie donné ne peut pas être résolu sur cet ordinateur de taille finie. Il ne peut être résolu que sur un ordinateur plus grand. (Ceci est vrai pour n'importe quelle méthode, pas seulement celle que vous proposez. Je ne vais pas donner de preuve formelle, mais voici l'essentiel. Si un ordinateur C peut exécuter N programmes différents dont au moins un P ne se termine pas , alors un ordinateur V capable de vérifier si ces programmes s'arrêtent doit également être en mesure d'exécuter N programmes de vérificateur différents. Si C et V sont le même ordinateur, P n'est pas l'un des N programmes différents exécutés par V; L’ordinateur doit exécuter au moins N + 1 programmes différents, ce qui contredit l’hypothèse selon laquelle C exécute N programmes différents.)

M2M256

Les chiffres montrent que penser à un ordinateur comme une machine à états finis est rarement pratique. Le nombre d'États est peut-être limité, mais c'est ahurissant, incroyablement énorme. La seule façon de raisonner à propos de programmes autres que des jouets est dans l'abstrait, non pas en énumérant des états, mais par un raisonnement logique.

Donc, à l'exclusion des programmes paradoxaux, le problème de l'arrêt est décidable

Le paradoxe ne vient pas du problème, mais de la tentative de solution. Pour tout programme donné, il existe un algorithme qui dit «oui» si le programme se termine et «non» si le programme ne se termine pas. C'est trivial: soit print "yes"ou print "no"va faire. Le problème est de déterminer lequel appeler. L'impossibilité de résoudre le problème bloquant signifie qu'il n'y a pas d'algorithme pour effectuer cette détermination. La raison pour laquelle la preuve utilise un argument de diagonalisation est qu’elle doit montrer qu’aucunla solution fonctionne; pour ce faire, il part d'une solution supposée arbitraire et montre qu'il doit rater certains programmes en construisant un programme manqué. La diagonalisation (ce que vous appelez à tort un «paradoxe») est dans la construction, pas dans le programme qui en résulte. Les programmes résultants ne sont pas auto-référentiels.

Il existe un résultat plus général appelé le théorème de Rice qui stipule que toute propriété non trivialedes programmes est indécidable - toute propriété qui dépend uniquement du comportement du programme et non pas de la manière dont il est écrit (par exemple, "le code source contient-il moins de 42 caractères?" est clairement décidable, alors que "existe-t-il un programme dont le code source est composé de moins de 42 caractères et qui renvoie le même résultat pour toutes les entrées? ”n’est pas, et“ ce programme n’a-t-il jamais rien produit? ”). L'arrêt n'est qu'un exemple. C’est un point important, car cela revient souvent dans la pratique (en général, nous voulons savoir si un programme donnera un résultat dans un délai raisonnable compte tenu des ressources limitées de l’ordinateur sur lequel il est exécuté, mais comme il est rarement possible de répondre de manière pratique, nous sommes disposé à se contenter de la simple question de savoir si le programme se terminera éventuellement avec suffisamment de temps et de mémoire).


2
Je penserais que la question "existe-t-il un programme qui produirait le même résultat qu'un programme autonome donné (pas d'entrée, mais le programme lui-même), mais en moins de temps, y compris le temps de chargement du programme ?" serait décidable, mais insoluble, dans la mesure où la longueur maximale des programmes candidats serait limitée, tout comme le temps nécessaire pour les tester.
Supercat

@supercat Oui, cette propriété est décidable. Ce n'est pas décidable pour le cas général d'un programme qui prend des entrées.
Gilles

1
J'avais l'impression que le problème de l'arrêt suppose généralement que toutes les contributions qu'un programme recevra au cours de son exécution sont regroupées avec le programme. Si on avait une machine qui pourrait résoudre comme par magie le problème d' arrêt pour tout programme alimenté tout particulier séquence d'entrée, une telle machine pourrait déterminer si un programme arrêterait pour toutes les entrées de longueur limitée?
Supercat

3
@supercat Non, l' oracle des arrêts pour toutes les entrées serait un cran plus haut que l' oracle des arrêts pour une entrée donnée. Cela ferait une bonne question pour ce site… en fait nous l'avons . En passant, mon modèle mental par défaut est celui des fonctions récursives, où «entrée» signifie «argument» et exécuter un programme signifie l'appliquer à un argument. vous avez raison de dire que ma déclaration est fausse dans un contexte concernant les machines de Turing, je vais la mettre à jour.
Gilles

28

Il me semble que le problème de l’arrêt n’est autre chose qu’un prétendu «paradoxe», une contradiction de référence (au moins cyclique) de la même manière que le paradoxe du menteur. La seule conclusion à tirer est que la fonction d’arrêt est susceptible de poser de telles questions mal formées.

Non, ce n'est pas le problème qui nous arrête. Les paradoxes comme le paradoxe du menteur ne sont ni vrais ni faux, ils n'ont tout simplement aucun sens. Un algorithme déterministe, par contre, s’arrêtera pour une entrée donnée ou fonctionnera indéfiniment. La fonction halts(program, input)a une valeur déterministe parfaitement définie pour chaque programme, pour chaque entrée. Nous ne pouvons tout simplement pas en décider pour quelque programme que ce soit. Ou, plus précisément: nous ne pouvons pas écrire un programme qui puisse le décider pour chaque paire programme / entrée.

Σ(n):=nnnnΣ(n)


2
Il convient de noter que, dans la forme commune, le paradoxe du menteur fait explicitement référence à lui-même, mais que le même problème peut survenir même s'il ne le fait pas. La réponse à la déclaration formée en prenant le texte est-elle "La réponse à la déclaration est-elle formée en prenant le texte et en insérant, après la première virgule, une copie entre guillemets, non?" et en insérant après la première virgule une copie entre guillemets simples, non? Une telle déclaration n'est pas explicitement auto-référentielle, mais fait référence à la véracité d'une déclaration qui est caractère par caractère.
Supercat

2
@supercat: hein, je ne pense pas avoir déjà vu un quine en anglais ...
SamB

@ SamB: j'en ai vu quelques-uns, mais j'ai décidé de m'essayer à une formulation originale qui, bien que plus verbeuse que d'autres, se lit (peut-être) plus naturellement.
Supercat

24

Je ne comprends pas pourquoi le problème de l'arrêt est si souvent utilisé pour écarter la possibilité de déterminer si un programme est interrompu. L'article de Wikipedia explique correctement qu'une machine déterministe à mémoire finie arrêtera ou répétera un état antérieur. Vous pouvez utiliser l’algorithme qui détecte si une liste chaînée est mise en boucle pour implémenter la fonction d’arrêt avec une complexité d’espace de O (1).

Premièrement, oui, théoriquement, il est logique de considérer un ordinateur réel, à mémoire finie, comme une machine à états finis. Mais dans la pratique, le nombre d'états d'un ordinateur réel est si grand que les ordinateurs réels sont beaucoup mieux modélisés par des machines de Turing ou d'autres modèles de calcul à états infinis.

Et deuxièmement, même théoriquement, il est logique de considérer un ordinateur moderne comme une machine à états infinie. Une machine Turing n’a pas de bande infinie, elle a une bande qui peut toujours être étendue lorsque la machine manque de mémoire. Et n’est-ce pas exactement ce que nous pouvons faire avec de vrais ordinateurs? (Et si l'espace d'adressage de la CPU s'épuise, nous pouvons utiliser le cloud, etc.)

Il me semble que le problème de l’arrêt n’est autre chose qu’un prétendu «paradoxe», une contradiction de référence (au moins cyclique) de la même manière que le paradoxe du menteur. La seule conclusion à tirer est que la fonction d’arrêt est susceptible de poser de telles questions mal formées. Donc, à l'exclusion des programmes paradoxaux, le problème de l'arrêt est décidable. Alors, pourquoi la considérons-nous comme une preuve du contraire?

HPxHPx

La preuve de Turing sur le caractère indécidable du problème bloquant utilise une astuce similaire au paradoxe de Liar, oui. Un paradoxe est souvent défini comme une contradiction apparente et certaines personnes en déduisent qu'un paradoxe n'est donc pas une contradiction réelle . Cependant, le paradoxe de Russel (la contrepartie formelle de la théorie des ensembles au paradoxe du menteur) montrait une contradiction réelle en mathématiques, et la preuve de l'indécidabilité du problème bloquant utilise une contradiction réelle pour la prouver par contradiction.


1
+1 pour expliquer la relation entre des ordinateurs réels, des machines à états finis et des machines de Turing, élément essentiel de la configuration de la question.
David Richerby

1
Vous avez piqué mon intérêt. Quelle est la différence entre une contradiction apparente et une contradiction réelle?
Brent

En d’autres termes, la programmation ne suppose pas des ressources limitées. La plupart des algorithmes que nous concevons ou des programmes que nous écrivons ne sont pas écrits pour utiliser une quantité limitée, voire fixe, de ressources, à moins que nous ne les concevions spécifiquement. (c’est souvent nécessaire lors de la programmation de systèmes embarqués).
Reinierpost

3
@ Brent. De nombreux paradoxes ne sont pas du tout contradictoires, mais seulement à première vue. En regardant de plus près, il se trouve qu'il y a une erreur dans le raisonnement ou un mot dont le sens a légèrement changé en l'utilisant dans un contexte différent ou similaire. Parfois, cependant, un paradoxe met en lumière une contradiction réelle.
Hoopje

J'ai étudié ce problème de temps en temps depuis mon OP. Le théorème d'inachèvement de Gödel implique-t-il qu'il est toujours possible de trouver un paradoxe indépendamment du système de logique utilisé?
Brent

17

Jmite a vraiment bien répondu à la question. Permettez-moi d'ajouter une petite note au sujet de la similitude perçue avec le "paradoxe du menteur" qui, je pense, est causée par l'utilisation d'un mécanisme de référence à soi-même.

La référence à soi n'est pas paradoxale!

L'auto-référence est un outil vraiment utile en calcul (qu'un algorithme peut se référer à son code, réflexion ) et au langage humain (que l'on peut se référer à nous-mêmes, à la conscience de soi ).

Le problème qui cause le paradoxe du menteur n’est pas une référence à soi-même, c’est essayer d’utiliser le prédicat de vérité pour une langue (formelle) à l’intérieur de la langue. Cela causera des problèmes même sans référence à soi, nous n'avons pas besoin de la capacité d'utiliser la référence à soi pour obtenir un paradoxe: la référence à soi peut être éliminée! . Cela rendrait simplement la phrase moins belle et concise mais ce n’est pas difficile à faire. C'est essentiellement comment le théorème de Kleene à point fixe est prouvé. Ce que le paradoxe du menteur implique, c'est que la vérité des déclarations dans un langage (formel) est transcendante pour ce langage, et non que la référence à soi-même soit problématique.


Il me semble que votre malaise n’est pas dû à l’indécidabilité du problème bloquant (pour les machines de Turing) mais à l’acceptation des machines de Turing en tant que modèle théorique pour les ordinateurs. Typiquement (bien que pas toujours), les machines de Turing (et des modèles de calcul équivalents comme les machines à accès aléatoire ) sont bien utiles pour discuter du calcul sur des ordinateurs réels que des automates finis et il y a de bonnes raisons à cela (gardez à l'esprit qu'une machine de Turing n'a pas une quantité infinie de mémoire, elle a une quantité illimitée de mémoire et ce sont des choses différentes: sans limite signifie que nous pouvons fournir à la machine plus de mémoire quand elle en a besoin, pas qu’elle utilise une quantité infinie de mémoire).

Bien sûr, si vous voulez considérer les ordinateurs comme des automates finis, et que cela a du sens, le problème de l'arrêt des automates finis est décidable (et par décidable, nous entendons décidable par une machine de Turing et non par un automate fini). Ce n’est cependant pas ce que les gens veulent dire quand ils utilisent le problème d’arrêt, ils désignent le problème d’arrêt des machines de Turing.

s2s


14

le problème posé a introduit un nouveau concept mathématique d '"indécidabilité" qui n'existait pas auparavant en mathématiques. c'était une preuve ("apparemment paradoxale") que certains problèmes n'ont pas de "preuves". elle est liée au concept godélien d'improvabilité. Le théorème de Godels a précédé l'arrêt de la formulation du problème par Turing de quelques années. Le résultat de Godels était considéré à l’époque plutôt abstrait et n’était connu que des chercheurs et des spécialistes. Formulation Turing a montré que le principe de l' indécidabilité était liée à très pratique / pragmatique / appliquée aux questions de la science informatique tels que déterminer si des programmes arbitraires et stoppent il est considéré comme un concept beaucoup moins théorique, il apparaît dans les défis modernes tels que " (un défi si les ordinateurs peuvent découvrir des théorèmes) et prouver la fin du programme.

Un autre aspect intéressant est qu’il existe de très anciens problèmes dans la théorie des nombres (diophantiens) provenant des Grecs et non prouvés depuis des millénaires. il en résulte que les questions générales sur les équations de Diophant sont indécidables, ce qui est appelé le 10ème problème / théorème de Hilberts . Hilbert a vécu au tournant du XXe siècle et a proposé comme programme de recherche que les mathématiques puissent trouver une approche systématique des problèmes mathématiques. Ce défi / plan a été sérieusement frappé par la découverte de l’indécidabilité de quelques décennies plus tard. L’indécidibilité reste un domaine de recherche très avancé et la frontière entre les problèmes indécidables et décidables sera probablement toujours à l’étude et à l’analyse.


14

Vous semblez confondre la preuve classique "basée sur l'auto-référentiel" selon laquelle le problème de Halting ne peut pas être résolu avec le problème de Halting (ou Halt) lui-même.

Ce programme auto-référentiel - le programme qui s'arrête si et seulement si il ne s'arrête pas - est construit dans le but de prouver facilement que vous ne pouvez pas résoudre le problème de Halt. Le fait de prouver que X est impossible via la technique Y n'implique pas que Y est la seule raison pour laquelle nous ne pouvons pas résoudre X.

En d'autres termes, non seulement nous ne pouvons pas résoudre Halt, mais nous ne pouvons pas détecter le type de programme que nous ne pouvons pas déterminer s'il est arrêté, à l'exception d'une mesure grossière du type "si cela prend plus d'une minute ça ne s'arrête pas ".

Si vous partez du problème Halting et réduisez-le à d’autres problèmes, vous finirez par atteindre le point où vous avez réduit presque toutes les questions concernant les programmes qui le concernent. On se retrouve avec le théorème de Rice:

Soit S une propriété non triviale de 1 qu'une machine de Turing accepte. Cela signifie qu’il existe au moins une machine de Turing qui accepte une entrée avec la propriété S et une autre qui ne le fait pas.

Alors, il est indécidable si une machine de Turing donnée accepte une entrée avec la propriété S.

Vous voulez savoir si une machine de Turing accepte même des nombres entiers? Indécidable.

Vous voulez savoir si une machine de Turing accepte des séquences arithmétiques? Indécidable.

Vous pouvez raisonner sur les tripes de Turing Machine en général. Vous pouvez raisonner sur une machine de Turing particulière et prouver si elle arrêtera / acceptera une séquence / etc. Mais vous ne pouvez pas savoir si votre technique fonctionnera sur la prochaine machine de Turing que vous lui donnerez.


1 Par property ofcela n'inclut pas le mécanisme de l'acceptation, mais seulement de ce qui est accepté. "Il accepte en 100 étapes ou moins" est une propriété comme il accepte, pas de ce qui est accepté.


Vous voudrez peut-être expliquer ce qu'est une "propriété", car l'interprétation naïve que l'on pourrait en faire sera probablement incorrecte.
Rick Decker

@rick Je pense que la note de bas de page le couvre maintenant?
Yakk

7

Vous avez raison de dire que le problème d’arrêt, tel qu’il est couramment présenté et énoncé, n’est qu’un piège. Cela ne prouve pas qu'il ne peut pas y avoir de fonction à trois valeurs («arrêts», «boucles», «ne sait pas») qui, dans la pratique, renvoie toujours des «arrêts» ou des «boucles» et ne renvoie que «don» t ne sais pas »pour les coins spécialement construits par exemple.

Le problème d’arrêt est important pour deux raisons:

1) C’est l’un des premiers problèmes manifestement indécidables. Même si, de manière hypothétique, il n'y avait qu'un seul "ne sait pas", cela présenterait toujours un intérêt mathématique énorme.

2) Certains problèmes réduisent au problème d’arrêt où un attaquant malveillant peut fournir le cas à analyser. Cela nous oblige à accepter qu'il puisse y avoir des cas valables qu'il nous reste à rejeter.

Après coup, l'analyse logicielle est un problème difficile, même si de nombreux progrès ont été réalisés dans l'analyse et dans la conception de la langue afin de faciliter l'analyse. Si vous pouvez montrer qu’une tâche donnée ressemble à une analyse logicielle, oui, c’est difficile avec un H. majuscule. sténographie pour cette observation.


5

Eric Hehner a avancé un argument contrariant dans une série de documents qui soutiennent que la non-solubilité du problème de l'arrêt est généralement mal comprise. Les articles "Epimenides, Gödel, Turing: un éternel enchevêtrement d'or", "Problèmes liés au problème de l'arrêt", "Reconstruction du problème de l'arrêt" et "Arrêt du problème" sont disponibles ici . Pour que cette réponse ne soit pas "seulement un lien", je vais essayer de résumer l'une de ses conclusions, mais pas l'argument.

f(0)=1f(0)=2hh(M)MHhh


3
Je ne suis pas La fonction d’arrêt est un prédicat parfaitement défini et valide. Pour une machine de Turing donnée et une entrée donnée, la machine s’arrête ou effectue une boucle. (Il vous manque une référence appropriée; quel papaire êtes-vous en train de résumer?)
Raphaël

@Raphael Que la fonction soit bien définie est généralement accepté comme un fait. Le point de vue de Hehner est différent et est expliqué dans ses papiers. Je vais modifier ma réponse pour fournir les noms des documents.
Theodore Norvell

Disons simplement que quel que soit l'argument de Hehner [je n'ai pas lu les journaux], ils se sont révélés controversés au moins en première lecture / approximation: ' cs.toronto.edu/~hehner/Shallitaffair.pdf et recursed.blogspot.com/ 2013/10 / eric-hehner-replies.html
Fizz le

Et il n’est pas clair compte tenu de la nature et du nombre de citations des papiers de Hehner (à ce sujet) que toute lecture supplémentaire (de ses travaux à ce sujet) en vaut la peine.
Fizz

Ses preuves semblent très solides et indiquent qu'il ne s'agit que d'un remaniement de bêtises que vous pouvez faire en philosophie, comme d'essayer d'analyser l'énoncé auto-référentiel suivant pour en vérifier la véracité: "Cette phrase est fausse". ce qui, si vrai, signifie qu'il est faux, ce qui signifie que c'était réellement vrai, non, cela le rend encore faux ... cela ressemble donc à une question philosophique navale philosophique pas si importante. en.wikipedia.org/wiki/Liar_paradox le paradoxe stoppant peut être un cas où les scientifiques ne parlent pas aux philosophes.
James Wakefield

3

Je voudrais proposer une explication différente de l’importance du problème persistant qui concerne les personnes plutôt que les machines.

Il s’agit de la dernière conférence du cours de structure et d’interprétation du MIT 1986 ; le professeur demande "Y a-t-il des questions?" et se prépare à mettre fin à la conférence, lorsqu'un des étudiants demande: "Est-ce la dernière question?"

Pensez-y un instant. Comment l'enseignant peut-il répondre à cela? Si l'élève décide de contredire l'enseignant, l'enseignant n'a pas de réponse valable à donner - c'est comme si le problème était stoppant.

Nous avons l'habitude de penser de manière abstraite au problème qui nous pose problème, en utilisant des fonctions et des machines, mais c'est beaucoup plus profond que cela. Fondamentalement, cela signifie qu'il existe des questions parfaitement valables auxquelles il est impossible de répondre.

PS: Si vous ne savez pas de quel parcours je parle, allez le regarder, c'est génial.


Mais si je voudrais exécuter doesHalt(programCode, input);, le programme ne peut pas savoir ce que la doesHaltfonction retourne. Il est impossible que le programme se désactive une fois que la doesHaltfonction l'a évalué.
Tvde1

0

Je peux facilement écrire un programme qui donne une entrée n, ou le premier plus petit p> n, tel que p + 2 est aussi un premier, ou qui tourne toujours si aucun tel p n'existe. Si vous pouvez résoudre le problème et prédire si mon programme s'arrête pour chaque entrée, vous venez de résoudre la conjecture Twin Prime.

Il est tout à fait possible que cette hypothèse soit indécidable, auquel cas nous aurions un programme simple dans lequel le programme d’arrêt échouerait.


Je pense que vous mélangez "Turing-indécidable" avec une notion très différente; en fait, vous êtes peut-être tombé par hasard sur la "vieille vieille" erreur. Voir aussi ici et ici .
Raphaël
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.