Disputo el reclamo en el artículo que está leyendo. (No me pagan por esto, así que voy a proporcionar un argumento sugerente, no una prueba.)
Es bien sabido que, al menos bajo la reducción de orden normal (también llamada por nombre), el cálculo lambda puro es Turing-completo. Pero si miramos el artículo seminal de John Reynolds Definitional Interpreters for Higher-Order Programming Languages, podemos ver que Reynolds discute extensamente la diferencia entre llamada por nombre y llamada por valor. Una parte crítica del argumento es que para hacer una distinción adecuada, podemos transformar un programa en estilo de continuación de paso. La transformación de CPS es diferente para llamada por necesidad y llamada por valor, pero los términos transformados resultantes se pueden evaluar en cualquier estilo.
Aquí viene el argumento: escriba un programa lambda-calculus que simula una máquina de Turing, luego CPS lo transforma usando la transformación CBN, y puede evaluar el código resultante usando una estrategia de reducción de CBV. ¡Explosión! Turing-completo.
En la práctica, apuesto a que puede escribir un programa CBV para emular una máquina de Turing; probablemente sea suficiente para elegir un combinador de punto fijo adecuado, como Θ por ejemplo. (El más famoso combinador Y funciona sólo bajo una estrategia de reducción de llamada por nombre, es decir, reducción de orden normal.)
responsabilidad: No he estudiado cálculo lambda en mucho tiempo, y estoy seguro de que hay hay varios detalles incorrectos en el argumento anterior. Pero estoy seguro de la sustancia. No sería la primera vez que descubrí algo descaradamente mal en los recursos en línea sobre la teoría del lenguaje de programación.
¿Qué artículo? _ – kennytm
@KennyTM: Estoy tratando de encontrar la fuente en las referencias al final del artículo. Puedo darle un enlace si lo desea, pero está en ruso. – Roman
Un artículo en ruso es mejor que nada. Yo no, pero alguien puede leer ruso. – kennytm