He estado leyendo durante algunas semanas sobre el cálculo de Lambda, pero todavía no he visto nada que sea materialmente distinto de las funciones matemáticas existentes, y quiero saber si es solo una cuestión de notación, o si hay alguna nueva propiedades o reglas creadas por los axiomas del cálculo lambda que no se aplican a todas las funciones matemáticas. Entonces, por ejemplo, he leído que:
"Puede haber funciones anónimas" : las funciones de Lambda no son anónimas, solo se llaman lambda. Está permitido en notación matemática usar la misma variable para diferentes funciones si el nombre no es importante. Por ejemplo, las dos funciones en una conexión de Galois a menudo se llaman ambas *.
"Las funciones pueden aceptar funciones como entradas" : no es nuevo, puede hacerlo con funciones ordinarias.
"Las funciones son cajas negras" : solo las entradas y salidas también son descripciones válidas de funciones matemáticas ...
Esto puede parecer una discusión o una pregunta obstinada, pero creo que debería haber una respuesta "correcta" a esta pregunta. Quiero saber si el cálculo lambda es solo una convención de notación o sintáctica para trabajar con funciones matemáticas, o si hay diferencias sustanciales o semánticas entre las funciones lambdas y ordinarias.
Respuestas:
Irónicamente, el título está en el punto, pero no en la forma en que parece querer decir que es "el cálculo lambda es solo una convención de notación", lo cual no es exacto.
Los términos lambda no son funciones 1 . Son piezas de sintaxis, es decir, colecciones de símbolos en una página. Tenemos reglas para manipular estas colecciones de símbolos, la reducción beta más significativa. Puede tener varios términos lambda distintos que correspondan a la misma función. 2
Abordaré tus puntos directamente.
Primero, lambda no es un nombre que se está reutilizando. No solo sería extremadamente confuso, sino que no escribimosλ ( x ) (o ( λ x ) ), que es lo que haríamos si λ fuera un nombre para una función, al igual que escribimos F( x ) . En F( x ) podríamos reemplazar F (si estuviera definido por un término lambda) con el término lambda produciendo algo como ( λ y. y) ( x ) significa ( λ y. y) es una expresión que puede representar una función, no una declaración que declara una función (llamadaλ o cualquier otra cosa). En cualquier caso, cuando sobrecargamos la terminología / notación, se hace (es de esperar) de una manera que pueda ser desambiguada a través del contexto, que ciertamente no puede ser el caso para los términos lambda.
Su siguiente punto está bien pero es algo irrelevante. Esta no es una competencia donde hay Términos y Funciones del Equipo Lambda, y solo uno puede ganar. Una aplicación importante de los términos lambda es estudiar y comprender ciertos tipos de funciones. Un polinomio no es una función, aunque a menudo los identificamos descuidadamente. Estudiar polinomios no significa que uno piense que todas las funciones deberían ser polinomios, ni es el caso de que los polinomios tengan que "hacer" algo "nuevo" para que valga la pena estudiarlos.
Las funciones teóricas establecidas no son cajas negras, aunque están completamente definidas por su relación entrada-salida. (Literalmente son la relación de entrada-salida.) Lambda términos tampoco son cajas negras y son no definen por su relación de entrada-salida. Como he mencionado antes, puede tener términos lambda distintos que produzcan la misma relación de entrada-salida. Esto también subraya el hecho de que los términos lambda no pueden ser funciones, aunque pueden inducir funciones. 2
Esto también se aplica a los términos lambda, podemos interpretarlos como cosas distintas a las funciones. También son objetos mucho más manejables para trabajar que los conjuntos de funciones típicamente infinitas. Ambos son mucho más computacionales que las funciones arbitrarias. Puedo escribir un programa para manipular polinomios (con coeficientes que son representables al menos de manera computable) y términos lambda. De hecho, los términos lambda sin tipo son uno de los modelos originales de funciones computables. Esta perspectiva más simbólica / sintáctica, calculadora / computacional suele estar más enfatizada, especialmente para el cálculo lambda sin tipo , que las interpretaciones más semánticas del cálculo lambda. MecanografiadoLos términos lambda son cosas mucho más manejables y generalmente (pero no siempre) pueden interpretarse fácilmente como funciones teóricas establecidas, pero también pueden interpretarse en una clase de cosas aún más amplia además de funciones que el cálculo lambda sin tipo. También tienen una rica teoría sintáctica propia y una conexión muy profunda con la lógica .
1 Es posible que el problema sea al revés. Tal vez tenga una idea errónea sobre qué es una función.
3 Si tiene clara esta distinción, la analogía debería ser bastante informativa.
4 Este problema no ocurre con los campos de la característica 0, como los números complejos, reales, racionales o enteros, por lo que la distinción no es tan clara, aunque todavía existe.
fuente
Piensa en el concepto de variables. En idiomas antiguos como básico, no tenía una asignación dinámica y necesitaba un nombre para cada variable. (Esto no es perfectamente exacto porque tenía matrices, pero la idea es que ...) en muchos problemas, debe poder asignar tantas variables como desee, sin estar limitado por la cantidad de nombres que define su programa.
Las funciones de Lambda le permiten deshacerse de la misma limitación sobre los nombres de las funciones, permitiendo que su programa defina tantas funciones como necesite y las "almacene" en las estructuras de datos complejas de Sames como otras variables. Esto no es algo que podría hacer con funciones convencionales con nombre.
fuente
f(x)=let g(y)=x+y in g
, cada matemático sabrá instantáneamente lo que significa y estará de acuerdo en que este es un objeto matemático sensible (quizás hasta algunas objeciones acerca de tener claro el dominio def
). También estarán perfectamente felices si luego escribo el conjunto{f(n) | n ∈ ℕ}
, que contiene infinitas funciones y, en particular, no está limitado por tener solo un número finito de nombres para usar.