Esta es una pregunta mal formulada, así que primero tengamos sentido. Voy a hacerlo al estilo de la teoría de la computabilidad. Por lo tanto, usaré números en lugar de cadenas: un fragmento de código fuente es un número, en lugar de una cadena de símbolos. Realmente no importa, puede reemplazar con s t r i n g a continuación.Nstring
Deje ser una función de emparejamiento .⟨m,n⟩
Digamos que un lenguaje de programación viene dado por los siguientes datos:L=(P,ev)
- un conjunto decidible de "programas válidos", yP⊆N
- un computable y parcial función .ev:P×N→N
El hecho de que sea decidible significa que hay un mapa computable total v a l i d : N → { 0 , 1 } tal que v a l i d ( n ) = 1Pvalid:N→{0,1} . Informalmente, estamos diciendo que es posible saber si una cadena dada es un código válido. La función e v es esencialmente un intérprete para nuestro lenguaje: e v ( m , n ) ejecuta el código m en la entrada n - el resultado puede ser indefinido.valid(n)=1⟺n∈Pevev(m,n)mn
Ahora podemos introducir alguna terminología:
- Una lengua es total de si es una función total para todo m ∈ P .n↦ev(m,n)m∈P
- Un lenguaje interpreta el lenguaje L 2 = ( P 2 , e v 2 ) si existe u ∈ P 1 de tal manera que e v 1 ( u , ⟨ n , m ⟩ ) ≃ e v 2 ( n , m ) para todos n ∈ PL1=(P1,ev1) L2=(P2,ev2)u∈P1ev1(u,⟨n,m⟩)≃ev2(n,m)n∈Py . Aquí u es el simulador de L 2 implementado en L 1 . También se conoce como el programa universal para L 2 .m∈NuL2L1L2
Son posibles otras definiciones de " interpreta L 2 ", pero no me permitas entrar en esto ahora.L1L2
Decimos que y L 2 son equivalentes si se interpretan entre sí.L1L2
Existe el lenguaje "más poderoso" de las máquinas de Turing (al que se refiere como "una máquina de Turing") en el que n ∈ N es una codificación de una máquina de Turing y φ ( n , m ) es la función computable parcial que "ejecuta la máquina de Turing codificada por n en la entrada m ". Este lenguaje puede interactuar con todos los demás idiomas, obviamente ya que requerimos que e v sea computable.T=(N,φ)n∈Nφ(n,m)nmev
Nuestra definición de lenguajes de programación es muy relajada. Para que se cumpla lo siguiente, solicitemos tres condiciones más:
- implementa la función sucesora: hay s u c c ∈ P tal que e v ( s u c c , m ) = m + 1 para todos m ∈ N ,Lsucc∈Pev(succ,m)=m+1m∈N
- implementa la función diagonal: Hay d i un g ∈ P tal que e v ( d i un g , m ) = ⟨ m , m ⟩ para todos m ∈ N ,Ldiag∈Pev(diag,m)=⟨m,m⟩m∈N
- está cerrado bajo la composición de funciones: si L implementa f y g, entonces también implementa f ∘ g ,LLfgf∘g
Un resultado clásico es este:
Teorema: si un lenguaje puede interpretarse a sí mismo, entonces no es total.
Prueba. Supongamos que es el programa universal para un total de langauge L implementado en L , es decir, para todos m ∈ P y n ∈ N ,
e v ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) .
Como sucesor, diagonal y e v ( u , - ) se implementan en L , también lo es su composición k ↦uLLm∈Pn∈N
ev(u,⟨m,n⟩)≃ev(m,n).
ev(u,−)L . Existe
n 0 ∈ P tal que
e v ( n 0 , k ) ≃ e v ( u , ⟨ k , k ⟩ ) + 1 , pero entonces
e v ( u , ⟨ n 0 , n 0 ⟩ ) ≃ e v (k↦ev(u,⟨k,k⟩)+1n0∈Pev(n0,k)≃ev(u,⟨k,k⟩)+1
Como no hay un número igual a su propio sucesor, se deduce que
L no es total o que
L no interprete a sí misma. QED
ev(u,⟨n0,n0⟩)≃ev(n0,n0)≃ev(u,⟨n0,n0⟩)+1
LL
Observe que podríamos reemplazar el mapa sucesor con cualquier otro mapa sin punto fijo.
Aquí hay un pequeño teorema que creo que aclarará un malentendido.
Teorema: todo lenguaje total puede ser interpretado por otro lenguaje total.
Prueba. Sea ) = { e v ( n , m ) si b =L sea un lenguaje total. Obtenemos un total que interpreta L al unirse a L su evaluador e v . Más precisamente, dejar que P ' = { ⟨ 0 , n ⟩ | n ∈ P } ∪ { ⟨ 1 , 0 ⟩ } y definir e v ' como
e v ' ( ⟨ b , n ⟩ , mL′LLevP′={⟨0,n⟩∣n∈P}∪{⟨1,0⟩}ev′
Obviamente,L'es total porqueLes total. Para ver queL'puede simularLacaba de tomaru=⟨1,0
ev′(⟨b,n⟩,m)={ev(n,m)ev(m0,m1)if b=0,if b=1 and m=⟨m0,m1⟩
L′LL′L , Desde entonces
e v ' ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) , según se requiera. QED
u=⟨1,0⟩ev′(u,⟨m,n⟩)≃ev(m,n)
Ejercicio: [agregado 2014-06-27] El lenguaje construido anteriormente no está cerrado bajo composición. Arregle la prueba del teorema para que L ' satisfaga los requisitos adicionales si L lo hace.L′L′L
LL′L′LLL