J'ai réfléchi un moment s'il fallait ajouter une autre réponse. Les autres réponses portent sur le milieu de sa question (à propos de "turing complete", "tautology" et ainsi de suite). Permettez-moi de saisir la première et la dernière partie, et donc le tableau plus grand et légèrement philosophique:
Mais qu'est-ce que ça veut dire?
Que signifie être complet de Turing?
Existe-t-il un moyen de définir les capacités de Turing Machine sans se contenter de "pouvoir simuler une autre machine de Turing"?
De manière informelle, être complet de Turing signifie que votre mécanisme peut exécuter tous les algorithmes imaginables, quelle que soit leur complexité, leur profondeur, leur récursivité, leur complexité (longueur de code) et leur taille ou durée de stockage. nécessaire pour l'évaluer. Il va sans dire qu'il ne réussit que si le problème est calculable, mais si elle est calculable, il va réussir (arrêt).
(NB: pour découvrir pourquoi il s’agit là d’une démarche "informelle", consultez la thèse de Church-Turing qui va dans ce sens, avec une formulation plus élaborée; en tant que thèse, elle pourrait ou ne pourrait pas être correcte, cependant. Merci à @DavidRicherby pour. soulignant cette petite omission dans un commentaire.)
"Algorithme" signifie ce que nous entendons couramment par algorithme informatique aujourd'hui; C'est-à-dire une série d'étapes discrètes manipulant le stockage, avec une logique de contrôle mélangée. Ce n'est toutefois pas comme une machine Oracle, c'est-à-dire qu'il ne peut pas "deviner".
Exemple pour un langage pratique non-tc
Si vous vous êtes programmé, vous connaissez probablement les expressions régulières, utilisées pour faire correspondre les chaînes à un motif.
Ceci est un exemple de construction qui n'est pas Turing Complete. Vous pouvez facilement trouver des exercices où il est tout simplement impossible de créer une expression régulière correspondant à certaines phrases.
Par exemple (et cela a sûrement vexé de nombreux programmeurs dans des applications réelles), il est théoriquement et pratiquement impossible de créer une expression régulière correspondant à un langage de programmation ou à un document XML: il est impossible pour une expression rationnelle de trouver la structure de bloc ( do ... end
ou { ... }
dans les langues; ouverture et fermeture des balises dans les documents XML) s’ils sont autorisés à avoir une profondeur arbitraire. S'il existe une limite, par exemple, vous ne pouvez avoir que 3 niveaux de "récursivité", vous pouvez alors trouver une expression régulière; mais si ce n'est pas limité, alors c'est un non-aller.
Comme il est évidemment possible de créer un programme dans un langage complet de Turing (comme C) pour analyser le code source (n'importe quel compilateur le fait), les expressions rationnelles ne pourront jamais simuler ledit programme; elles ne sont donc pas, par définition, Turing-complete.
Motivation
L'idée de la machine à turing en soi n'a rien de pratique; C'est-à-dire que Turing ne l'a certainement pas inventé pour créer un véritable ordinateur ou quelque chose du genre, contrairement à Charles Babbage ou von Neumann, par exemple. Le concept de la machine de Turing est extrêmement simple. Cela consiste en presque rien. Il réduit les ordinateurs possibles (et réels) au strict minimum imaginable.
Le but de cette simplification, à son tour, est que cela facilite la réflexion sur des questions théoriques (telles que l’arrêt des problèmes, les classes de complexité et tout ce que l’informatique théorique se dérange). Une caractéristique en particulier est qu’il est généralement très facile de vérifier si une langue ou un ordinateur donné peut simuler une machine de Turing en programmant simplement ladite machine de Turing (ce qui est si facile!) Dans cette langue.
À l'infini
Notez que vous n'avez jamais besoin de temps infini ou de stockage; mais le temps et le stockage sont sans limite. Ils auront une valeur maximale pour chaque exécution calculable, mais il n’ya aucune limite quant à la taille de cette valeur. Le fait qu'un ordinateur réel finisse par manquer de RAM est passé sous silence. Ceci est bien sûr une limite pour tout ordinateur physique, mais cela est également évident et sans intérêt pour la "puissance de calcul" théorique de la machine. En outre, nous ne sommes pas intéressés par le temps que cela prend réellement. Ainsi, notre petite machine peut utiliser des quantités arbitraires de temps et d'espace, ce qui la rend absolument impraticable.
... et au-delà
Un dernier point étonnant, alors, est qu'un tel simple, chose simple peut faire tout tout ordinateur réel concevable pourrait jamais , dans tout l'univers, accomplir (juste très lent) - au moins autant que nous connaissons aujourd'hui.