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λ.