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 gNstring
Soit une fonction d'appariement .⟨m,n⟩
Disons qu'un langage de programmation est donné par les données suivantes:L=(P,ev)
- un ensemble décidable de "programmes valides", etP⊆N
- une calculable et partielle fonction .ev:P×N→N
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 ) = 1Pvalid: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.valid(n)=1⟺n∈Pevev(m,n)mn
Nous pouvons maintenant introduire une terminologie:
- Une langue est totale si est une fonction totale pour tous les m ∈ P .n↦ev(m,n)m∈P
- 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)u∈P1ev1(u,⟨n,m⟩)≃ev2(n,m)n∈Pet . 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 .m∈NuL2L1L2
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,φ)n∈Nφ(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 ,Ls u c c ∈ Pe v ( s u c c , m ) = m + 1m ∈ N
- 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 ,Lréi a g∈ Pe v ( di a g, M ) = ⟨ m , m ⟩m ∈ N
- est fermé sous la composition des fonctions: si L implémente f et g alors il implémente également f ∘ g ,LLFgF∘ g
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 ,
euLLm ∈ Pn ∈ N
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 0 ∈ P 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 (k↦ev(u,⟨k,k⟩)+1n0∈Pev(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.
e v ( u , ⟨ n0, n0⟩ ) ≃ e v ( n0, n0) ≃ e v ( 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 = 1LL′LLe v et définir e v ' comme
e v ' ( ⟨ b , n ⟩ , mP′= { ⟨ 0 , n ⟩ | n ∈ P} ∪ { ⟨ 1 , 0 ⟩ }e v′ De
toute évidence,L'est totale carLest totale. Pour voir queL'peut simulerLil suffitprendreu=⟨1,0
e v′( ⟨ B , n ⟩ , m ) = { e v ( n , m )e v ( m0, m1)si b = 0 ,si b = 1 et m = ⟨ m0, m1⟩
L′LL′L , Depuis lors
e v ' ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) , selonbesoins. QED.
u = ⟨ 1 , 0 ⟩e v′( U , ⟨ m , n ⟩ ) ≃ e v ( 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.L′L′L
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.LL′L′LLL