Hier ist der Kontext ( Struktur und Interpretation von Computerprogrammen , Abschnitt 1.1.8, unter der Überschrift "Lokale Namen"):
Ein Formalparameter einer Prozedur spielt eine ganz besondere Rolle in der Prozedurdefinition, da es nicht darauf ankommt, welchen Namen der Formalparameter hat. Ein solcher Name wird als gebundene Variable bezeichnet , und wir sagen, dass die Prozedurdefinition ihre formalen Parameter bindet . Die Bedeutung einer Prozedurdefinition bleibt unverändert, wenn eine gebundene Variable in der Definition einheitlich umbenannt wird.
Am Ende dieser letzten Zeile steht eine Fußnote (26), die besagt:
Das Konzept der konsequenten Umbenennung ist tatsächlich subtil und formal schwer zu definieren. Berühmte Logiker haben hier peinliche Fehler gemacht.
Auf was oder wen bezieht sich der Text? Warum sollte es schwierig sein, "konsistentes Umbenennen" zu definieren? Welche Logiker haben Fehler gemacht, um dies zu definieren, und was waren diese Fehler?
Antworten:
Dies ist eine Teilantwort: Ich habe keine Ahnung, auf welche Fehler oder Personen sich SICP bezieht. Ich kann nur einige Hinweise geben, warum es schmerzhaft sein kann, Variablen umzubenennen, wenn man genau damit umgeht.
Zunächst scheint es trivial zu sein, dies zu definieren. Beispielsweise können wir gebundene Variablen in indizierten Summen umbenennen
wobeie ein beliebiger Ausdruck ist und e{y/x} die syntaktische Ersetzung jedes x durch y . Trivial, richtig?
Nun, wenn wir die obige Regel blind anwenden, bekommen wir
Das ist nicht gut. Wir müssen die Anforderung "y kommt in e nicht vor " hinzufügen , oder wir erhalten einen Namenskonflikt.
Betrachten Sie nun diese korrekte Umbenennung
Wenn wirx in y umbenennen wollen, können wir dies nach der obigen Regel auf der rechten Seite tun, aber nicht auf der linken Seite. Das ist unpraktisch, da sich die beiden nur durch eine Umbenennung unterscheiden, so dass sie gleich behandelt werden sollten.
Ein typischer Ansatz besteht darin,e{y/x} als "einfangvermeidende Substitution" neu zu definieren und die Anforderung " y tritt nicht in e " zu lockern und stattdessen " y tritt nicht frei in e " zu verwenden.
Wir definieren dann freie Vorkommen:
Schließlich erfassen Substitutionsvermeidung:
Ich hoffe, ich habe es richtig gemacht. (Mein erster Versuch war übrigens falsch)
Stellen Sie sich vor, Sie müssten sich jedes Mal mit dieser komplizierten Definition befassen, wenn wir etwas in der PL-Theorie beweisen wollen . Wir könnten, aber wir wollen nicht. Es ist langweilig, mühsam, fehleranfällig, macht den Beweis unübersichtlich und gibt dem Leser keinen Einblick. Aus diesem Grund überspringen viele PL-Autoren einfach die Details, indem sie sagen (oder sogar als gegeben voraussetzen!), Dass Begriffe "bis zur Umbenennung von Variablen" zu verstehen sind, dass alle gebundenen Variablen als verschieden von dem angenommen werden, von dem sie verschieden sein müssen. dass wir von der "Barendregt-Konvention" ausgehen, oder so ähnlich.
Um brutal ehrlich zu sein, ist dies ein Betrug in Beweisen. Wir könnten auch hinzufügen "wink wink, nudge nudge, sag nichts mehr!" im selben Geist. Wir bitten im Wesentlichen um Gnade und sagen dem Leser: "Schau, das ist langweilig, ich will es nicht tun, du willst es nicht lesen - wir wissen beide, dass wir diesen Beweis mit großem Aufwand umschreiben könnten alle Einzelheiten angeben ".
Technisch gesehen , es ist möglich , diese Abkürzung zu nutzen , um eine falsche Aussage zu beweisen. Der erfahrene Proof-Reviewer weiß jedoch, was "moralisch in Ordnung" ist und (mit großem Aufwand) perfektioniert werden kann und was verdächtig ist. Letzteres könnte etwas beinhalten, das von der tatsächlichen Wahl der gebundenen Namen abhängt (also arbeiten wir nicht wirklich "bis zu", wie versprochen!). In diesen Fällen bittet die Überprüfung um weitere Details, damit er überzeugt werden kann.
quelle