In der reinen Lambda-Rechnung haben wir die induktiv definierte Menge von Begriffen (die Grammatik):
Im Rahmen der Call-by-Value-Bewertungsstrategie haben wir die Inferenzregeln für die Beta-Reduktion und Regeln für die Bewertung von Anwendungen (Kongruenzregeln). Ich versuche zu verstehen, wie Bewertungskontexte die Kongruenzregeln ersetzen können, ohne die Syntax der Sprache tatsächlich zu ändern. Ohne Bewertungskontexte haben wir Folgendes:
Dies ist sinnvoll, da, wenn wir eine Instanz eines Ausdrucks , klar ist, dass dies der ist der Form und damit
Wenn wir die Kongruenzregeln durch Bewertungskontexte ersetzen: , benötigen wir nur eine einzige Regel, um die Kongruenzregeln der Sprache auszudrücken:
Ich bin verwirrt darüber, wie Bewertungskontexte uns sagen können, wie der Ausdruck von oben bewertet werden kann, ohne die Syntax der Sprache zu ändern. Ich verstehe nicht, wie der Evaluierungskontext "funktioniert", ohne as neu zu schreiben
wobei . Es gibt keinen offensichtlichen a priori Grund, unter Call-by-Value ohne Kenntnis von zu bewerten . Ich habe wirklich keine Ahnung, wo ich falsch liege. Kann jemand helfen, mein Denken zu korrigieren?
quelle
Antworten:
Die Subtilität liegt darin, wo zwischen Sprache und Metasprache unterschieden wird. Wie René Magritte es ausdrückte:
Wenn wir eine Regel wie schreiben , gibt sie das folgende Axiom an: für alle Lambda-Terme und und jeden Wert , wenn reduziert sich auf dann reduziert sich auf . Hier verwenden wir wieder Meta-Notationen (dh mathematische Notationen, um über eine Sprache zu argumentieren): den Pfeil , um die Reduktionsrelation auszudrücken; Metavariablen, bei denen ein Buchstabe die Sortierung angibt ( für Lambda-Begriffe,
Wenn wir die Regel schreiben
Die Grammatik des Bewertungskontexts folgt der Struktur der Bewertungsregeln. Es handelt sich also nicht wirklich um zwei Methoden, sondern um zwei verschiedene Arten, dieselbe Definition auszudrücken.
Um dies zu verstehen, empfehle ich dringend die folgende Übung: Implementieren Sie in Ihrer Lieblingssprache die Bewertung des Lambda-Term-Call-by-Value auf einfache Weise, wobei ein Typ Lambda-Terme darstellt und eine Funktion einen Reduktionsschritt ausführt.
quelle