¿Qué hace que el cálculo lambda sea relevante para el estudio?

10

Comenzaré un curso universitario de ciencias de la computación el próximo otoño, pero realmente no puedo entender el cálculo λ en el contexto de la programación funcional. Puedo estar malinterpretando esto por completo, pero según esta definición de la Enciclopedia de Filosofía de Stanford, es solo otra notación para las funciones.

Si es solo eso, ¿por qué es ventajoso usar el cálculo λ sobre las anotaciones de funciones regulares para calcular el tiempo de ejecución del algoritmo?

Jules
fuente
55
No es "simplemente otra notación para funciones" sino "la primera notación para funciones".
Andrej Bauer el
Gracias por la sugerencia, @Kaveh. Lo tendré en cuenta para futuras publicaciones, sin embargo, la respuesta de mhelvens es excelente, por lo que no es necesario un poste cruzado.
Es un cuerpo de objetos formalmente definido. No veo cuál es tu problema exacto.
Raphael
Realmente no entendí la terminología o por qué se hicieron las cosas, se hacen en la programación funcional hasta que aprendí sobre el cálculo lambda. Hace que las construcciones de software parezcan mucho menos arbitrarias.
dansalmo

Respuestas:

13

En informática queremos analizar y comprender el código fuente con rigor matemático. Esa es la única forma de probar propiedades interesantes (como la terminación) con absoluta certeza. Para eso necesitamos un lenguaje con un significado muy bien definido para cada construcción.

En teoría, este podría ser cualquier lenguaje con una buena semántica formal . Pero para hacer las cosas menos complicadas y menos propensas a errores, es mejor usar un lenguaje que sea lo más simple posible pero que sea capaz de expresar cualquier programa (es decir, que Turing esté completo ). Para razonar sobre el código imperativo, hay máquinas de Turing . Pero para razonar sobre la programación funcional, existe el cálculo .λ

El cálculo básico es como un lenguaje de programación funcional, pero con una gran cantidad de 'equipaje' eliminado. No es importante que este sea un buen lenguaje para escribir programas, ni que sea un lenguaje eficiente. Solo que es simple y expresivo. Por ejemplo, no necesitamos bucles, porque podemos simularlos con recursividad. Y no necesitamos funciones con múltiples parámetros, ya que podemos simularlos con Curry .λ

Ahora, en algún momento es posible que desee probar propiedades sobre construcciones que no son parte del cálculo básico (sin tipo) . Es por eso que los informáticos lo han extendido en diferentes direcciones a lo largo de los años. Por ejemplo, para razonar sobre los sistemas de tipos, hay muchas variaciones de tiposλ -calculiλ.

mhelvens
fuente
3
En mi opinión, algunas ciencias de la computación pueden ser sobre la comprensión del código fuente, pero decir que es cierto en general suena como decir que la física se trata de comprender los cohetes con rigor matemático. la informática se trata de computación. Una queja relacionada es que la eficiencia del lenguaje es importante si desea estudiar la eficiencia y no el código fuente bien formado. En ese sentido, probablemente sea mejor pensar en TM como una forma de pensar sobre la eficiencia en lugar de un modelo de lenguajes imperativos (y para ambos propósitos, la palabra RAM podría ser una mejor opción)
Sasho Nikolov
por cierto lo que escribí arriba no significa que no me gusta tu respuesta :)
Sasho Nikolov
Convenido. ;-) Corregido.
mhelvens
1
Máquinas de Turing son atroces en el razonamiento sobre el código imperativo, es mucho más fácil de usar un lenguaje de juguete como un simple , mientras que el lenguaje tipo. stackoverflow.com/questions/507310/the-while-language . Las máquinas de Turing siguen siendo muy útiles para comprender la teoría de la complejidad.
cody
1

λλ

Si es solo eso, ¿por qué es ventajoso usar el cálculo λ sobre las anotaciones de funciones regulares para calcular el tiempo de ejecución del algoritmo?

Hay muchas ventajas al usar Lisp o la programación funcional y el cálculo del tiempo de ejecución del algoritmo es solo una posibilidad (aunque sería útil si citara una referencia para eso). dado que ya está en notación funcional, a veces determinar las fórmulas para el tiempo de ejecución mediante inducción o relaciones de recurrencia puede tener una relación más fuerte o más obvia con el código original. También se simplifican otros tipos de análisis del algoritmo.

Otra ventaja principal es la simplicidad sintáctica. Los analizadores para otros idiomas son muy complejos, pero los analizadores Lisp son muy simples. entonces Lisp es un gran lenguaje para estudiar la teoría del análisis.

Otro aspecto clave es analizar el software más desde un punto de vista lógico o matemático. perspectiva / visión perspectiva "científica de la computación".

Como señala la otra respuesta, Lisp tiene que ver con la recursividad en lugar de la iteración y la recursión está muy en el corazón de CS.

λSe puede encontrar " y detalles en [1], una referencia gratuita en línea y semifamosa.

[1] Estructura e interpretación de programas de computadora, por Abelson y Sussman

vzn
fuente