Clair, complet, preuve qu'une langue est Turing Compete?

10

J'ai vu des sites Web qui prétendent «prouver» que HTML5 + CSS est Turing Complete.

J'ai vu des sites Web qui prétendent «prouver» que SQL est Turing Complete.

J'ai vu un tas de sites Web qui prétendent «expliquer» ce que signifie être Turing Complete.

Assez!

Où puis-je trouver un livre (écrit par un expert en théorie de la calculabilité) ou un article évalué par les pairs (dans une revue réputée) qui montre une preuve de: "Ce langage XYZ est capable de décrire une machine de calcul qui a la même puissance de calcul comme une machine de Turing "?

Roger Costello
la source
3
Aucun expert n'écrira un tel document car ce serait inutile.
Andrej Bauer
Mais il y a des papiers qui font ça. Considérez que les circuits insensibles aux retards sont Turing-complete qui a une preuve par construction.
Dan D.
2
Je vais manger mon chapeau si vous pouvez trouver un article évalué par des pairs qui a une preuve détaillée que HTML5 + CSS, ou SQL, ou PHP sont Turing complet.
Andrej Bauer
@andrej essayez celui-ci. assez proche? XSLT version 2.0 est Turing-Complete: une preuve basée uniquement sur la transformation . peut-être juste manger vos légumes: p
vzn
voir aussi ce qui rend un langage complet , programmers.se
vzn

Réponses:

12

Chaque langue qui peut mettre en œuvre deux compteurs (deux registres qui peuvent stocker deux entiers arbitrairement grands) et un programme en une séquence marquée de ces deux instructions élémentaires est complète Turing:C1,C2

  • ADD au compteur , instruction GOTOC i I j1CiIj
  • Soustraire du compteur si et l'instruction GOTO ; sinon (si ) instruction GOTOC i C i > 0 I j C i = 0 I k1CiCi>0IjCi=0Ik

Le résultat est prouvé dans:

Marvin L. Minsky, "Insolvabilité récursive du problème d'étiquette de Post et d'autres sujets dans la théorie des machines de Turing" (1961)

N'oubliez pas qu'un modèle de calcul (dans votre cas, un langage de programmation + un périphérique qui exécute des programmes écrits dans ce langage ) ne peut être considéré comme complet que s'il prend en charge l'accès à une quantité illimitée de mémoire (c'est-à-dire l'espace) ou peut stocker ( sous une certaine forme) des entiers arbitrairement grands. Une implémentation de langage de programmation sur un ordinateur réel équivaut à un automate borné linéaire .

Vous pouvez également trouver de nombreuses références sur les pages Wikipedia sur le modèle RAM et le modèle RASP .

Enfin un joli livre centré sur l'équivalence des différents modèles de calcul est:

"Modèles de calcul: une introduction à la théorie de la calculabilité", par Maribel Fernandez

Vor
la source
"N'oubliez pas qu'un langage de programmation ne peut être considéré comme Turing complet que s'il prend en charge l'accès à une mémoire infinie" Par conséquent, il ne peut pas exister d'implémentation d'un langage Turing complet? Est-ce votre conclusion? Ou vouliez-vous dire que toutes (la plupart) des langues que nous utilisons sont Turing Complete parce que cette exigence est facile à réaliser? Les deux conclusions sont valables d'après votre réponse, telles qu'elles sont actuellement.
Bakuriu
@Bakuriu: en effet, la phrase est un peu ambiguë; Je veux seulement dire qu'un modèle de calcul peut être considéré comme Turing complet si - sous une certaine forme - il permet d'utiliser un stockage illimité. La plupart des langages de programmation sont Turing complets parce que dans leurs spécifications (syntaxiques) ils n'ont pas de limites sur la taille des variables ou des pointeurs, mais leurs implémentations sont limitées; voir par exemple C <limits.h>. Donc, même si vous avez un ordinateur avec une mémoire illimitée qui exécute une implémentation C, vous ne pouvez pas utiliser cette mémoire à moins que vous ne fournissiez un "mécanisme supplémentaire" qui ne fait pas partie du langage.
Vor
Techniquement, les implémentations de langage de programmation sur de vrais ordinateurs ne sont même pas une véritable incarnation d'automates linéaires, dans la mesure où elles ne peuvent pas accepter des CSL arbitraires ... pour la même raison, les ordinateurs ne sont pas équivalents aux machines de Turing, c'est-à-dire pas assez Mémoire. De combien de mémoire une machine aurait-elle besoin pour accepter la langue contextuelle ? Je suppose que vous pourriez objecter que vous seriez en mesure de le résoudre à condition d'avoir suffisamment de place pour écrire la question, mais cela ne change pas le fait que nous ne pouvons pas créer un modèle physique équivalent aux LBA ...{w.ww{0,1}}
Patrick87
3

Les deux manuels les plus utilisés sur la calculabilité et la théorie de la complexité sont les suivants:

Michael Sipser: Introduction à la théorie du calcul , 2 / e, Cengage, 2005.

John E Hopcroft; Jeffrey D Ullman: Introduction to Automata Theory, Languages ​​and, Computation , Addison-Wesley, 1979.

Il y a aussi une belle monographie de philosophie pour les profanes qui passe en revue les détails techniques de la théorie de la calculabilité sans les preuves formelles.

Douglas Hoftstadter: Gödel, Escher, Bach , Basic Books, 1979.

Enfin, la meilleure introduction à la calculabilité peut être un livre de puzzle d'un célèbre logicien:

Raymond Smullyan: The Lady or the Tiger and Other Logic Puzzles , Penguin, 1983. (Maintenant dans une édition bon marché de Douvres, 2009.)

(Il commence par un tas de puzzles basés sur le paradoxe du menteur, puis vous explique la construction d'une déclaration autoréférentielle sous la forme d'un puzzle de style Sherlock Holmes sur une mystérieuse boîte verrouillée.)

Logique errante
la source