TL; DR. Die Metamathematik der Bindung ist subtil : Sie scheint trivial zu sein, ist es aber nicht - egal, ob Sie sich mit (Logik höherer Ordnung) oder mit 𝜆-Kalkül beschäftigen. Sie sind so subtil, dass verbindliche Darstellungen ein offenes Forschungsfeld bilden, mit einem Wettbewerb ( die POPLmark-Herausforderung ) vor einigen Jahren. Es gibt sogar Witze von Fachleuten über die Komplexität der Bindungsansätze.
Wenn Sie sich also für Metamathematik interessieren (und die meisten Mathematiker nicht), müssen Sie sich mit dem Binden befassen. Aber viele Mathematiker können die Formalisierung der Bindung mit Sicherheit so behandeln, als wäre sie ein "grundlegendes" Problem.
Ein weiterer Punkt ist, dass die Bindung das einzige "neue" Problem in Sprachen mit Funktionen höherer Ordnung war, da die Theorie der Sprachen mit Bindung nur Algebra (für Konstanten) + Bindung ist. Mitchells "Grundlagen der Programmiersprachen" präsentiert die Dinge tatsächlich in dieser Reihenfolge und ist ziemlich aufschlussreich.
Mir ist bekannt, wie seine Arbeit den Weg für λ-Kalkül ebnete und wie sich "es" auf das Rechnen und die funktionale Programmierung im Allgemeinen auswirkt. Meine Frage richtet sich hauptsächlich auf die Zeit "vor" der Erstellung von λ-Kalkül und "nach" Schönfinkels Arbeit.
Ich muss etwas vermissen, aber diese Bemerkung scheint keinen Unterschied zu machen. Das Binden in Logiken höherer Ordnung und das Binden in λ-Kalkül scheinen ebenso schwierig zu sein, so lange sich Menschen um Logiken höherer Ordnung kümmerten, mussten sie sich mit dem Binden befassen. Ich bin voreingenommen, weil ich auf Curry-Howard-Isomorphismus basierende Theorembeweiser verwende, die Logik implementieren, indem ich einfach eine Typentheorie implementiere (wobei Typen Formeln und Programme Beweisbegriffe sind), sodass ich mich nur einmal mit dem Binden befasse.
Andererseits, IIRC, kümmerten sich zu der Zeit tatsächlich nur wenige um Schönfinkels Arbeit - auch wegen der Art und Weise, wie er sie veröffentlichte (nicht). Die Artikel wurden größtenteils von Kollegen verfasst, die auf seinen Recherchen beruhten (siehe hier , Seite 4). ; Curry entdeckte die Theorie dann unabhängig wieder.
Vorsichtsmaßnahme: Ich bin kein Historiker, sondern ein Doktorand in PL, daher ist meine Perspektive eine moderne (und hoffentlich genaue) zu diesem Thema.
BEARBEITEN:
Warum ist das Binden subtiler, etwas konkreter
Das hat zwei Facetten: Erstens ist die Implementierung schwierig. Zweitens ist Metamathematik die Mathematik der Beweismanipulation: Diese Manipulation erfolgt normalerweise automatisch, dh es handelt sich um einen Algorithmus. Sie haben also im Wesentlichen alle Schwierigkeiten bei der Implementierung und müssen Beweise dafür erstellen. Unten gebe ich Beispiele. Die Beispiele haben eine moderne Perspektive - es geht um tatsächlich formalisierte Beweise. Einige der Schwierigkeiten würden sich jedoch auf genaue manuelle Beweise erstrecken - solange Sie nicht an Details herumschummeln.
Dies zeigt, dass Schönfinkel einfach die erste Lösung für dieses Problem gab, aber dies war alles andere als definitiv.
Die Implementierung ist aufgrund von Schatten subtil
Das grundlegende Problem bei der Implementierung ist das Abschatten. Normalerweise verwendet man nicht denselben Namen für verschiedene gebundene Variablen. Aber Sie können es in der Lambda-Rechnung nicht vermeiden, zumindest weil Funktionen (und ihre gebundenen Variablen) dupliziert werden: reduziert sich auf . Dies ist noch kein Problem, aber ausgehend von Sie und dann : Jetzt müssen Sie sich mit Schatten beschäftigen. Sie können dies auf Kosten der Komplikation der Beta-Reduktionsregel vermeiden.( & lgr; x . x ) 1 + ( & lgr; x . x ) 2 ( & lgr; f x . f ( f x ) ) ( & lgr; g y . g y ) z ( & lgr; g y . g y ) ( & lgr;( λ f. f 1 + f 2 ) ( λ x . X )( λ x . x ) 1 + ( λ x . x ) 2 ( λ fx . f( fx ) ) ( λ g y. G y) z ( λ y . ( λ g y . g y ) y ) z( λ gy. G y) ( λ g y. G y) z ( λ y. ( λ gy. G y) y ) z
Sobald Sie verschiedene Variablen mit demselben Namen haben, müssen Sie auch die Erfassung verhindern. Das einfachste Beispiel für die Erfassung ist die Anwendung der Funktion (erstes Argument zurückgeben) zu darf nicht (die Identitätsfunktion), aber (eine konstante Funktion).y λ y . y λ y ' . yλ x y.xyλ y. yλy′.y
Schlimmer ist, dass die Gegenbeispiele zu naiven Algorithmen schwer zu konstruieren sind, wenn Sie das Problem bereits kennen, geschweige denn, wenn Sie es nicht kennen. Fehler in fast korrekten Algorithmen bleiben oft jahrelang unentdeckt. Ich höre, dass selbst gute Schüler normalerweise nicht (von sich aus) die richtige Definition für einfangvermeidende Substitution finden. Tatsächlich sind Doktoranden (ich eingeschlossen) und Professoren nicht von diesem Problem befreit.
Dies ist einer der Gründe, warum einige (einschließlich eines der besten Lehrbücher über Programmiersprachen, Typen und Programmiersprachen von Benjamin Pierce) eine namenlose Darstellung empfehlen (nicht ganz kombinatorische Logik, obwohl sie verwendet wurde, sondern deBrujin-Indizes).
Beweise dafür sind subtil
Es stellt sich heraus, dass Beweise für das Binden nicht einfacher sind als die oben erwähnte Implementierung. Natürlich gibt es korrekte Algorithmen, und es gibt Beweise dafür - aber ohne fortgeschrittene Maschinerie müssen Sie die Beweise für jede Sprache mit Bindung wiederholen, und diese Beweise sind einfach sehr umfangreich und ärgerlich, wenn Sie die Definitionen für das Binden auf Stift und Papier verwenden .
Betrachten Sie zur Veranschaulichung der in der Metamathematik verwendeten Algorithmen den Deduktionssatz in der Logik, der es ermöglicht, einen Beweis für unter der Annahme von und einen Beweis für zu erstellen, um einen Beweis für . Um diesen Satz zu beweisen, zeigen Sie tatsächlich einen Algorithmus, der die Syntax der beiden beteiligten Beweise bearbeitet und die Syntax für einen Beweis von . Dieser Algorithmus muss sich mit dem Binden befassen.A A B BBAABB
Als nächstes schlug ich mein bestes Beispiel vor: "Was läuft falsch, wenn Sie versuchen, die Standarddefinition zu formalisieren?". Russell O'Connor (der sich auf dieser Site befindet) formalisierte den ersten Unvollständigkeitssatz von Gödel in Coq (einem Satzbeweiser der oben genannten Art) - und dieser Satz beinhaltet eine Logik (mit allen relevanten Algorithmen) in einer anderen Logik (mit der Syntax von die erste als Zahlen codierte Logik). Er verwendete die Definitionen, die auf dem Papier verwendet wurden, und formalisierte sie direkt. Suchen Sie nach "Substitution" oder "Variable" und zählen Sie, wie oft sie in Bezug auf Probleme auftreten, um sich einen Eindruck zu verschaffen.
http://r6.ca/Goedel/goedel1.html
Ich verwende diese Definitionen nie in meiner Arbeit, aber jeder alternative Ansatz hat einige Nachteile.