21 votos

¿Qué rompe la completitud de Turing del cálculo lambda simplemente tipado?

En la página de Wikipedia sobre Completitud de Turing Podemos leer eso:

Aunque el cálculo lambda (no tipificado) es Turing-completo, el cálculo lambda simplemente tipificado no lo es.

Tengo curiosidad por saber qué es lo que hace que un cálculo lambda simplemente tipado no sea Turing completo. ¿Es sólo ¿se relaciona con el hecho de que el cálculo lambda de tipo simple es fuertemente normalizador y, por tanto, puede resolver su propio problema de detención de forma trivial?

Como bonus sería estupendo si alguien pudiera proporcionarme un ejemplo de función computable que no pueda ser definida en el cálculo lambda simplemente tipado.

22voto

Tahir Puntos 106

Naturaleza de lo incompleto

Se dice que un sistema computacional es completo de Turing si el sistema puede utilizarse para simular una máquina de Turing arbitraria en una cadena de entrada arbitraria. Dado que $\lambda^{\rightarrow}$ es fuertemente normalizador, se garantiza que todo programa bien tipificado se reduce a una forma normal irreducible (es decir, todo programa se detiene). Por lo tanto, no podríamos escribir un $\lambda^{\rightarrow}$ programa para simular una máquina de Turing en una entrada para la cual la máquina nunca se detiene; todo $\lambda^{\rightarrow}$ programas se detienen y tal máquina de Turing en tal entrada, trivialmente, no lo hace.

De manera menos formal, simular máquinas de Turing arbitrarias con entradas arbitrarias significa que se necesita alguna forma de elección condicional (para emular la capacidad de la cabeza de la cinta para moverse a lo largo de la misma), y algún medio para almacenar y manipular un número arbitrario de posiciones de memoria (para emular la cinta). Para $\lambda^{\rightarrow}$ Las reglas de tipificación son suficientes para encapsular la noción de elección, pero no podemos operar sobre cantidades arbitrarias de memoria porque los tipos no pueden recurrir.

Contraejemplos de tipicidad

En cuanto a las cosas que no se pueden expresar con $\lambda^{\rightarrow}$ Un ejemplo clásico sería operadores de punto fijo . Considere por ejemplo Combinador Y que se define como $f.(x. f(xx))(x. f(xx))$ . Obsérvese que dentro de $(xx)$ no podemos asignar un tipo único a las dos apariciones de $x$ .

Un respuesta a una pregunta similar en el sitio de CSTheory sugiere un ejemplo más inteligente: la función que toma un argumento de función computable y devuelve su número de Gödel. También en este caso, la autorreferencia desempeña un papel central y utilizando un argumento diagonal se puede demostrar que no puede existir un término de tipo simple para dicha función.

0 votos

Gracias por esta excelente respuesta.

0 votos

Muchas gracias a Marco Solieri por añadir contexto a mi respuesta, por lo demás blanda. Esta es una gran pregunta, y una respuesta sólida es más que merecida.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X