TL; DR. Las metamatemáticas de la unión son sutiles : parecen triviales, pero no lo son, ya sea que se trate de lógicas (de orden superior) o cálculo 𝜆. Son tan sutiles que las representaciones vinculantes forman un campo de investigación abierto, con una competencia ( el desafío POPLmark ) hace algunos años. Incluso hay bromas de personas en el campo sobre la complejidad de los enfoques de enlace.
Entonces, si te interesan las metamatemáticas (y la mayoría de los matemáticos no), debes lidiar con el enlace. Pero muchos matemáticos pueden tratar con seguridad la formalización de la vinculación como si fuera un problema "fundamental".
Otro punto es que el enlace era el único problema "nuevo" en los idiomas con funciones de orden superior, porque la teoría de los idiomas con enlace es solo álgebra (para constantes) + enlace. "Fundamentos de los lenguajes de programación" de Mitchell en realidad presenta las cosas en este orden y es bastante esclarecedor.
Soy consciente de cómo su trabajo allanó el camino para el cálculo de λ y el impacto de "eso" en la informática y la programación funcional en general. Mi pregunta se dirige principalmente al tiempo "anterior" a la creación del cálculo λ y "después" del trabajo de Schönfinkel.
Debo estar perdiendo algo, pero esta observación parece no hacer ninguna diferencia. La unión en lógicas de orden superior y la unión en cálculo λ parecen tan difíciles, por lo que mientras las personas se preocuparan por las lógicas de orden superior, tenían que lidiar con la unión. Estoy sesgado al usar demostradores de teoremas basados en el isomorfismo de Curry-Howard que implementan la lógica simplemente implementando una teoría de tipos (donde los tipos son fórmulas y los programas son términos de prueba), por lo que solo trato con el enlace una vez.
Por otro lado, el IIRC, en ese momento, a pocos les importaba el trabajo de Schönfinkel, en parte debido a cómo él (no) lo publicó, los documentos fueron escritos principalmente por colegas basados en la investigación que hizo (ver aquí , página 4) ; Curry redescubrió la teoría de forma independiente.
Advertencia: no soy historiador, sino estudiante de doctorado en PL, por lo que el mío es una perspectiva moderna (y con suerte precisa) sobre el tema.
EDITAR:
¿Por qué es vinculante sutil, un poco más concreto
Hay dos facetas: primero, implementarlo es difícil. En segundo lugar, la metamatemática es la matemática de la manipulación de pruebas: esta manipulación es típicamente automática, es decir, es un algoritmo , por lo que esencialmente enfrenta todas las dificultades de implementación, además de hacer pruebas sobre ellas. A continuación doy ejemplos. Los ejemplos tienen una perspectiva moderna: se trata de pruebas realmente formalizadas. Sin embargo, algunas de las dificultades se extenderían a pruebas manuales precisas, siempre que no engañe a los detalles.
Esto muestra que Schönfinkel simplemente dio la primera solución a este problema, pero esto estaba lejos de ser definitivo.
Implementarlo es sutil debido al sombreado
( λ f. F 1 + f 2 ) ( λ x . X )( λ f x . f ( f x ) ) ( λ g y . g y ) z ( λ g y . g y ) ( λ g y . g y ) z ( λ y . ( λ g y .( λ x . x ) 1 + ( λ x . x ) 2 ( λ fx . F( fx ) ) ( λ g y. sol y) z ( λ gy. sol y) ( λ g y. sol y) z ( λ y. ( λ gy. sol y) y ) z : ahora necesitas lidiar con el sombreado. Puede evitar esto, a costa de complicar la regla de reducción beta.
Una vez que tenga diferentes variables con el mismo nombre, también debe evitar la captura. El ejemplo más simple de captura es que aplica la función (devolver el primer argumento) a no debe dar (la función de identidad), pero (una función constante).λ x y. Xyλ y. yλ y′. y
Lo peor es que los contraejemplos de algoritmos ingenuos son difíciles de construir cuando ya conoce el problema, y mucho menos cuando no lo sabe. Los errores en algoritmos casi correctos a menudo permanecen sin ser detectados durante años. Escuché que incluso los buenos estudiantes generalmente no logran (por sí solos) la definición correcta de sustitución para evitar la captura. De hecho, los estudiantes de doctorado (yo incluido) y los profesores no están exentos de este problema.
Esa es una de las razones por las cuales algunos (incluido uno de los mejores libros de texto sobre lenguajes de programación, Tipos y lenguajes de programación de Benjamin Pierce) recomiendan una representación sin nombre (no es una lógica combinatoria, aunque se haya utilizado, sino índices deBrujin).
Las pruebas al respecto son sutiles
Resulta que las pruebas sobre el enlace no son más simples que la implementación, como se mencionó anteriormente. Por supuesto, existen algoritmos correctos y existen pruebas sobre ellos, pero sin maquinaria avanzada, para cada idioma que use encuadernación, debe repetir las pruebas, y esas pruebas son simplemente muy grandes y molestas si usa las definiciones de encuadernación en lápiz y papel .
Para ejemplificar algoritmos involucrados en metamatemáticas, tenga en cuenta el teorema de deducción en lógicas, que permite componer una prueba de suponiendo y una prueba de para obtener una prueba de . Para demostrar que el teorema, que presentan en la actualidad un algoritmo que funciona en la sintaxis de las dos pruebas involucrados y produce la sintaxis de una prueba de . Este algoritmo necesita lidiar con el enlace.siUNUNsisi
Luego, busqué mi mejor ejemplo de "qué sale mal si intentas formalizar la definición estándar". Russell O'Connor (que está en este sitio) formalizó el primer teorema de incompletitud de Gödel en Coq (un probador de teoremas del tipo mencionado anteriormente), y ese teorema involucra una lógica (con todos los algoritmos relevantes) en otra lógica (con la sintaxis de la primera lógica codificada como números). Usó las definiciones que se usan en papel y las formalizó directamente. Busque "sustitución" o "variable" y cuente con qué frecuencia aparecen en referencia a problemas para obtener una impresión.
http://r6.ca/Goedel/goedel1.html
Nunca uso esas definiciones en mi trabajo, pero cada enfoque alternativo tiene algunas desventajas.