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
∑xe=∑y(e{y/x})
wobei e 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
∑x(x+y)=∑y(y+y)
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
∑x∑y(x+y)=∑x∑z(x+z)
Wenn wir x 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:
free(x)={x}free(e+t)=free(e)∪free(t)free(∑xe)=free(e)∖{x}
Schließlich erfassen Substitutionsvermeidung:
- x{t/y} istt wennx=y undx sonst.
- (e+e′){t/y}=e{t/y}+e′{t/y} (einfacher Fall)
- (∑xe){t/y}=??
x=yx∑xe
y≠x(∑xe){t/y}=∑x(e{t/y})xt
zyt∑xe(∑xe){t/y}=∑z(e{z/x}{t/y})
Ich hoffe, ich habe es richtig gemacht. (Mein erster Versuch war übrigens falsch)
zz
αλx
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.