Une langue totale que seule une langue complète de Turing peut interpréter

16

Toute langue qui n'est pas complète de Turing ne peut pas écrire elle-même un interprète. Je n'ai aucune idée de l'endroit où je l'ai lu, mais je l'ai vu utilisé à plusieurs reprises. Il semble que cela donne lieu à une sorte de langage complet «ultime» non Turing; celui (s) qui ne peutêtre interprété par une machine de Turing. Ces langages ne seraient pas nécessairement capables de calculer toutes les fonctions totales des naturels aux naturels, ni nécessairement isomorphes (c'est-à-dire que les langages ultimes A et B existent de telle sorte qu'il existe une fonction F que A peut calculer mais B ne peut pas). Agda peut interpréter le système T de Godel et Agda est total, de sorte qu'un langage aussi ultime devrait être strictement plus puissant que le système T de Godel semble-t-il. Il me semble qu'un tel langage serait au moins aussi puissant que agda (même si je n'ai aucune preuve, juste un pressentiment).

Des recherches ont-elles été faites dans ce sens? Quels résultats sont connus (à savoir est-ce qu'un tel langage "ultime" est connu)?

Bonus: je crains qu'il existe un cas pathologique qui ne peut pas calculer des fonctions que le système T de Godel pourrait encore ne peut être interprété que par une machine de Turing car il permet de calculer des fonctions vraiment étranges. Est-ce le cas ou pouvons-nous savoir qu'un tel langage serait capable de calculer tout ce que le système T de Godel pourrait calculer?

Jake
la source
2
Vos déclarations prêtent à confusion en raison de la façon dont vous utilisez la terminologie. Au lieu de vous fier à la terminologie, essayez de formuler votre question d'une manière mathématique rigoureuse et claire afin que nous puissions comprendre votre question. Qu'entendez-vous par langage de programmation dans le contexte de la théorie de la calculabilité? Voulez-vous dire une énumération des fonctions calculables?
Kaveh
1
Ma conjecture sur ce que vous lisez: si un langage est assez fort et contient la fonction universelle d'une autre classe de fonctions, il peut définir la fonction diagonale de cette classe. S'il s'agit d'une classe de fonctions totales, la fonction diagonale ne peut pas être dans la classe.
Kaveh
Il a été indiqué de manière informelle où je l'ai trouvé. Quelque chose littéralement dans le sens de ce que j'ai donné ici. Je ne sais pas non plus comment le dire de façon mathématique. Après quelques lectures, je ne suis pas sûr de ce qu'est la "fonction diagonale d'une classe de fonctions". Je pense que selon vos termes, ce que je veux dire, c'est "qu'une classe de fonctions totales ne peut pas contenir sa propre fonction universelle" et donc je pense que je demande "quelle classe de fonctions totales C est-il le cas qu'aucune classe de fonctions totales ne contient la fonction universelle pour C ". Si je comprends ce qu'est une "fonction universelle", je pense que c'est correct.
Jake
1
À proprement parler, ce n'est pas une question de recherche. Aussi, pourquoi est-ce un wiki communautaire? Ou est-ce?
Andrej Bauer
"Il semble que cela donne lieu à une sorte de langage complet" ultime "qui ne se vérifie pas; celui (s) qui ne peut être interprété que par une machine de Turing." ne suivez pas cette affirmation, cela semble non séquentiel, que voulez-vous dire, pourquoi cela semble-t-il ainsi?
vzn

Réponses:

42

C'est une question mal formulée, alors essayons d'abord de la comprendre. Je vais le faire dans le style de la théorie de la calculabilité. Ainsi j'utiliserai des nombres au lieu de chaînes: un morceau de code source est un nombre, plutôt qu'une chaîne de symboles. Cela n'a pas vraiment d'importance, vous pouvez remplacer par tout au long ci-dessous.s t r i n gNstrjeng

Soit une fonction d'appariement .m,n

Disons qu'un langage de programmation est donné par les données suivantes:L=(P,ev)

  1. un ensemble décidable de "programmes valides", etPN
  2. une calculable et partielle fonction .ev:P×NN

Le fait que soit décidable signifie qu'il existe une carte calculable totale v a l i d : N{ 0 , 1 } telle que v a l i d ( n ) = 1Pvunelje:N{0,1} . De manière informelle, nous disons qu'il est possible de dire si une chaîne donnée est un morceau de code valide. La fonction e v est essentiellement un interprète pour notre langage: e v ( m , n ) exécute le code m sur l'entrée n - le résultat peut être indéfini.vunelje(n)=1nPevev(m,n)mn

Nous pouvons maintenant introduire une terminologie:

  1. Une langue est totale si est une fonction totale pour tous les m P .nev(m,n)mP
  2. Une langue interprète la langue L 2 = (L1=(P1,ev1) s'il existe u P 1 de telle sorte que e v 1 ( u , n , m ) e v 2 ( n , m ) pour tout n PL2=(P2,ev2)uP1ev1(u,n,m)ev2(n,m)nPet . Ici u est le simulateur pour L 2 implémenté dans L 1 . Il est également connu sous le nom de programme universel pour L 2 .mNuL2L1L2

D'autres définitions de " interprète L 2 " sont possibles, mais je ne vais pas entrer dans le détail maintenant.L1L2

On dit que et L 2 sont équivalents s’ils s’interprètent.L1L2

Il y a le langage "le plus puissant" des machines de Turing (que vous appelez "une machine de Turing") dans lequel n N est un codage d'une machine de Turing et φ ( n , m ) est la fonction calculable partielle qui "exécute l'encodage de la machine de Turing par n sur l'entrée m ". Ce langage peut intercepter tous les autres langages, évidemment car nous avions besoin que e v soit calculable.T=(N,φ)nNφ(n,m)nmev

Notre définition des langages de programmation est très détendue. Pour que les éléments suivants passent, exigons trois autres conditions:

  • implémente la fonction successeur: il y a s u c c P tel que e v ( s u c c , m ) = m + 1 pour tout m N ,LsuccPev(succ,m)=m+1mN
  • implémente la fonction diagonale: il n'y a ; d i a g P de telle sorte que e v ( D i a g , m ) = m , m pour tout m N ,LjeunegPev(jeuneg,m)=m,mmN
  • est fermé sous la composition des fonctions: si L implémente f et g alors il implémente également f g ,LLFgFg

Un résultat classique est le suivant:

Théorème: si une langue peut s'interpréter elle-même, elle n'est pas totale.

Preuve. Supposons que est le programme universel pour un langauge totale L mis en œuvre en L , à savoir, pour tout m P et n N , euLLmPnN Comme successeur, diagonale et e v ( u , - ) sont implémentées dans L , il en est de même de leur composition k

ev(u,m,n)ev(m,n).
ev(u,-)L . Il existe n 0P de telle sorte que e v ( n 0 , k ) e v ( u , k , k ) + 1 , puis e v ( u , n 0 , n 0) e v (kev(u,k,k)+1n0Pev(n0,k)ev(u,k,k)+1 Comme il n'y a pasnombre égal son successeur, il résulte que L est non totale ou que L ne s'interprète pas. QED.
ev(u,n0,n0)ev(n0,n0)ev(u,n0,n0)+1
LL

Observez que nous pourrions remplacer la carte successeur par toute autre carte sans point fixe.

Voici un petit théorème qui, je pense, effacera un malentendu.

Théorème: Chaque langue totale peut être interprétée par une autre langue totale.

Preuve. Soit une langue totale. On obtient un total L ' qui interprète L en accolant à L son évaluateur e v . Plus précisément, soit P ' = { 0 , n | ) = { e v ( n , m ) si  b = 0 , e v ( m 0 , m 1 ) si  b = 1LLLLev et définir e v ' comme e v ' ( b , n , mP={0,nnP}{1,0}ev De toute évidence,L'est totale carLest totale. Pour voir queL'peut simulerLil suffitprendreu=1,0

ev(b,n,m)={ev(n,m)si b=0,ev(m0,m1)si b=1 et m=m0,m1
LLLL , Depuis lors e v ' ( u , m , n ) e v ( m , n ) , selonbesoins. QED.u=1,0ev(u,m,n)ev(m,n)

Exercice: [ajouté le 2014-06-27] Le langage construit ci-dessus n'est pas fermé sous composition. Fixer la preuve du théorème pour que L satisfasse aux exigences supplémentaires si L le fait.LLL

En d'autres termes, vous n'avez jamais besoin de la pleine puissance des machines de Turing pour interpréter un langage total - un langage total légèrement plus puissant L ' suffit. Le langage L ' est strictement plus puissant que L car il interprète L , mais L ne s'interprète pas lui-même.LLLLLL

Andrej Bauer
la source
Si j'ai coché la case wiki, c'était involontaire.
Andrej Bauer
2
Y a-t-il une puissance supplémentaire dans les langues où vous ne pouvez pas dire si un programme donné est valide ou non?
Phylliida
3
@DaniPhye: Si la syntaxe du langage n'est pas semi-décidable, vous pouvez "masquer" la puissance de calcul dans la syntaxe. Par exemple, les règles de langage pourraient exiger que chaque fonction soit équipée d'un bit qui indique si la fonction est totale. Nous pourrions alors implémenter is_total, qui n'est pas non plus cmputable, mais ne pourrions pas implémenter l'évaluation (car il faudrait également calculer le bit de la fonction résultante). En général, je dirais que ce n'est pas un langage de programmation si vous ne pouvez même pas implémenter un analyseur.
Andrej Bauer
3
Comment "Si une langue peut s'interpréter elle-même n'est pas totale", ce gel: un auto-interprète pour le F-oméga ?
Cactus
18

Toute langue qui n'est pas complète de Turing ne peut pas écrire elle-même un interprète.

Cette déclaration est incorrecte. Considérez le langage de programmation dans lequel la sémantique de chaque chaîne est "Ignorez votre entrée et arrêtez immédiatement". Ce langage de programmation n'est pas Turing complet mais chaque programme est un interprète du langage.

David Richerby
la source
Ah! C'est un bon point. Il doit donc y avoir certaines exigences sur ce que le langage calcule. Il semble que certaines exigences minimales doivent être imposées à la puissance de la langue pour que cette affirmation soit vraie. Il semble que si nous exigeons qu'il soit capable de résoudre des problèmes arithmétiques de base, cela pourrait tenir.
Jake
@Jake Vous pourriez peut-être réellement vous en sortir avec quelque chose d'incroyablement faible comme "le langage définit au moins une fonction non constante" ou "le langage définit plus d'une fonction". Mon contre-exemple est clairement trivial pour toute définition raisonnable de «trivial».
David Richerby
Cela ressemble à un problème intéressant auquel je dois penser. Si je trouve quelque chose, je répondrai.
Jake