TL; DR. Les métamathématiques de la liaison sont subtiles : elles semblent triviales mais ne le sont pas - que vous ayez affaire à des logiques (d'ordre supérieur) ou au 𝜆-calcul. Ils sont si subtils que les représentations contraignantes forment un champ de recherche ouvert, avec un concours ( le défi POPLmark ) il y a quelques années. Il y a même des blagues sur le terrain concernant la complexité des approches de la liaison.
Donc, si vous vous souciez de la métamathématique (et la plupart des mathématiciens ne le font pas), vous devez gérer la liaison. Mais de nombreux mathématiciens peuvent traiter en toute sécurité la formalisation de la liaison comme s'il s'agissait d'un problème "fondamental".
Un autre point est que la liaison était le seul "nouveau" problème dans les langues avec des fonctions d'ordre supérieur, parce que la théorie des langues avec liaison est juste algèbre (pour les constantes) + liaison. Les «fondements des langages de programmation» de Mitchell présentent les choses dans cet ordre et sont plutôt instructifs.
Je suis conscient de la façon dont son travail a ouvert la voie au λ-calcul et à l'impact de "it" sur l'informatique et la programmation fonctionnelle en général. Ma question porte principalement sur l'époque «antérieure» à la création du λ-calcul et «après» l'article de Schönfinkel.
Je dois manquer quelque chose, mais cette remarque ne semble faire aucune différence. La liaison dans les logiques d'ordre supérieur et la liaison dans le λ-calcul semblent aussi difficiles, aussi longtemps que les gens se soucient des logiques d'ordre supérieur, ils doivent gérer la liaison. Je suis biaisé en utilisant des démonstrateurs de théorèmes basés sur l'isomorphisme de Curry-Howard qui implémentent la logique en implémentant simplement une théorie des types (où les types sont des formules et les programmes sont des termes de preuve), de sorte que je ne traite qu'une fois de la liaison.
D'autre part, l'IIRC, à l'époque en effet, peu se souciait du travail de Schönfinkel - en partie à cause de la façon dont il ne l'a pas (publié) - les articles ont été principalement rédigés par des collègues sur la base de ses recherches (voir ici , page 4) ; Curry a ensuite redécouvert la théorie indépendamment.
Avertissement: je ne suis pas historien, mais doctorant en PL, donc le mien est une perspective moderne (et, espérons-le, exacte) sur le sujet.
ÉDITER:
Pourquoi la reliure est-elle subtile, un peu plus concrètement
Il y a deux facettes: premièrement, sa mise en œuvre est difficile. Deuxièmement, la métamathématique est la mathématique de la manipulation de preuves: cette manipulation est généralement automatique, c'est-à-dire qu'il s'agit d'un algorithme - donc, essentiellement, vous faites face à toutes les difficultés de mise en œuvre, en plus de faire des preuves à leur sujet. Ci-dessous, je donne des exemples. Les exemples ont une perspective moderne - ils concernent des preuves réellement formalisées. Cependant, certaines des difficultés s'étendraient aux épreuves manuelles précises - tant que vous ne trichez pas sur les détails.
Cela montre que Schönfinkel a simplement donné la première solution à ce problème, mais ce n'était pas définitif.
Sa mise en œuvre est subtile en raison de l' observation
Le problème fondamental de la mise en œuvre est l'observation. Habituellement, on ne réutilise pas le même nom pour différentes variables liées. Mais vous ne pouvez pas l'éviter dans le calcul lambda, au moins parce que les fonctions (et leurs variables liées) sont dupliquées: réduit à . Ce n'est pas encore un problème, mais à partir de vous donne puis : vous devez maintenant vous occuper de l'observation. Vous pouvez éviter cela, au prix de compliquer la règle de réduction bêta.( λ x . x ) 1 + ( λ x . x ) 2 ( λ f x . f ( f x ) ) ( λ g y . g y ) z ( λ g y . g y ) ( λ( λ f. F 1 + f 2 ) ( λ x . X )( λ x . x ) 1 + ( λ x . x ) 2 ( λ fx . F( fx ) ) ( λ g y. g y) z ( λ gy. g y) ( λ g y. g y) z ( λ y. ( λ gy. g y) y ) z
Une fois que vous avez différentes variables portant le même nom, vous devez également empêcher la capture. L'exemple le plus simple de capture est celui de l'application de la fonction (retourne le premier argument) à ne doit pas donner (la fonction d'identité), mais (une fonction constante).λ x y. Xyλ y. yλ y′. y
Le pire est que les contre-exemples d'algorithmes naïfs sont difficiles à construire lorsque vous connaissez déjà le problème, et encore moins quand vous ne le savez pas. Les bogues dans des algorithmes presque corrects restent souvent non détectés pendant des années. J'entends que même les bons élèves ne parviennent généralement pas à trouver (par eux-mêmes) la définition correcte de la substitution évitant la capture. En fait, les doctorants (moi y compris) et les professeurs ne sont pas exemptés de ces problèmes.
C'est une des raisons pour lesquelles certains (y compris l'un des meilleurs manuels sur les langages de programmation, les types et les langages de programmation de Benjamin Pierce) recommandent une représentation sans nom (pas tout à fait logique combinatoire, même si elle a été utilisée, mais plutôt des index deBrujin).
Les preuves à ce sujet sont subtiles
Il s'avère que les preuves de liaison ne sont pas plus simples que la mise en œuvre, comme mentionné ci-dessus. Bien sûr, des algorithmes corrects existent et des preuves existent - mais sans mécanisme avancé, pour chaque langue utilisant la reliure, vous devez répéter les épreuves, et ces épreuves sont simplement très grandes et ennuyeuses si vous utilisez les définitions de la reliure sur stylo et papier .
BUNEUNEBB
Ensuite, j'ai recherché mon meilleur exemple de "ce qui ne va pas si vous essayez de formaliser la définition standard". Russell O'Connor (qui est sur ce site) a formalisé le premier théorème d'incomplétude de Gödel dans Coq (un prouveur de théorème du type mentionné ci-dessus) - et ce théorème implique une logique (avec tous les algorithmes pertinents) dans une autre logique (avec la syntaxe de la première logique codée en nombres). Il a utilisé les définitions qui sont utilisées sur papier et les a formalisées directement. Recherchez «substitution» ou «variable» et comptez la fréquence à laquelle ils apparaissent en référence aux problèmes pour vous faire une idée.
http://r6.ca/Goedel/goedel1.html
Je n'utilise jamais ces définitions dans mon travail, mais chaque approche alternative a ses inconvénients.