Lambda-Kalkül: Unterschied zwischen Kontexten und Bewertungskontexten


12

Erstens möchte ich darauf hinweisen, dass mein nachstehender Text Fehler enthalten kann. Sie können also jederzeit auf Fehler bei der Formulierung der Frage hinweisen.

Betrachten Sie einen nicht typisierten Lambda-Kalkül mit Booleschen Werten und if-Anweisungen, deren Terme durch diese Syntax gegeben sind:

 t ::= v | t t | if t t t | x
 v ::= \x.t | #t | #f

Die Kontexte C würden in diesem Fall gemäß der folgenden Syntax angegeben:

C ::= [-] | \x. C | C t | t C | if C t t | if t C t | if t t C 

Zusätzlich könnte man Bewertungskontexte E nach dieser anderen Syntax definieren:

E ::= [-] | \x. E | v E | E t | if E t t 

Ich habe meine Frage in drei Unterpunkte aufgeteilt, auf die ich eingehen möchte.

  1. Wann werden die beiden Begriffe verwendet? Ich weiß zum Beispiel, dass Bewertungskontexte verwendet werden, um die Semantik des Kalküls zu definieren, aber die Verwendung von Kontexten entgeht mir immer noch etwas. Auch ich möchte hier eine Bestätigung meines Wissens.
  2. Wann ist das eine dem anderen vorzuziehen und warum?
  3. Könnten Sie auf relevante Artikel verweisen, die mir helfen könnten, diese Angelegenheit zu klären?

Antworten:


15

Kontext wird für viele Zwecke verwendet, normalerweise jedoch zum Definieren von Programmkongruenzen. Bewertungskontexte sind eine Teilmenge von Kontexten. Sie werden typischerweise zur Definition von Reduktionsrelationen verwendet. Lassen Sie mich jeweils ein Beispiel geben.

Eine formale Art und Weise Programm Gleichheit zu definieren , ist zu sagen , zwei Programme und N ist kontextuell gleich sie sich in jedem Kontext , ohne eine Änderung des Verhaltens ersetzen. Wir können dies wie folgt definieren: M und N sind für alle schließenden Kontexte C [ ] für M und N kontextuell gleich : C [ M ] t genau dann, wenn C [ N ] t . Wir sagen, ein Kontext schließt sich für M , NMNMNC[]MNC[M]tC[N]tM,Nwenn weder noch C [ N ] freie Variablen haben. Der Ausdruck M t bedeutet, dass sich das Programm M in einer endlichen Anzahl von Schritten auf den Wert t reduziert . (Im Übrigen ist zu beachten, dass die Definition der kontextuellen Äquivalenz für umfangreiche Begriffe der Berechnung, z. B. gleichzeitige Prozesse, eine größere Rolle spielt.)C[M]C[N]MtMt

Im Gegensatz dazu sind Bewertungskontexte Kontexte, die die Bewertung nicht blockieren. Genauer gesagt ist ein Bewertungskontext ein Begriff mit einem Loch an dem Punkt, an dem der nächste atomare Reduktionsschritt stattfinden muss (oder für eine nicht deterministische Berechnung stattfinden kann). Für Bewertungskontexte sollte also folgende Regel gelten: Als Beispiel für die Verwendung von Bewertungskontexten betrachtenwirdie Reduktionsregeln für Call-by-Value-λ-Kalkül, bei denen wir nicht unterλreduzieren. Selbst wenn alsoMN ist, haben wir keine Reduktionλx. Mλx. N. Dies kann leicht mit der obigen allgemeinen Kontextregel zusammen mit einer Grammatik für Bewertungskontexte ausgedrückt werden, dieλ-Ausdrückeweglässt. Evaluationskontexte wurden erstmals in verwendet

MNE[M]E[N]
λλMNλx.Mλx.NλDer überarbeitete Bericht über die syntaktischen Theorien der Ablaufsteuerung und des Zustands von Felleisen und Hieb.

14

Ein Kontext ist ein syntaktischer Begriff. Ein Kontext ist ein Begriff mit einem Loch. (Gelegentlich gibt es Kontexte mit mehreren Löchern. In diesem Fall wird die Definition klar angegeben.) Die Syntax von Kontexten wird definiert, indem die Syntax von Begriffen verwendet wird und ein Subterm ein Loch anstelle eines Begriffs sein darf . In BNF (Ich benutze die Lambda-Kalkül als Beispiel, ohne booleans und wenn Aussagen , die sich auf das Beispiel nichts bringen.): C : : = [ ] | x | t[]

C:: =[]xtCCtλx.C

Zusammen mit der Definition eines Kontexts entsteht die Definition, einen Begriff in einen Kontext zu setzen. Wenn ein Kontext und t ein Term ist, dann ist C [ t ] der Term, der erhalten wird, indem t in den Syntaxbaum gesetzt wird, in dem sich das Loch [ ] in C [ t ] befindet . Dies ist im Grunde eine Substitution, bei der die Variable garantiert genau einmal vorkommt (beachten Sie jedoch, dass die „Variable“, die substituiert wird, eine Variable auf Metaebene ist, [ ] und keine Variable im Lambda-Kalkül oder in einer anderen Sprache der Begriffe t ).C[]tC[t]t[]C[t][]t

Kontexte werden verwendet, um verschiedene Definitionen in der Semantik zu formulieren. Ein weit verbreitetes Beispiel ist, dass die meisten Evaluierungsbegriffe die Definition von Kontexten beinhalten, in denen eine Evaluierung durchgeführt werden kann. Betrachten Sie zum Beispiel die Lambda-Rechnung. Der Grundbegriff der Bewertung ergibt sich aus der Beta-Reduktionsregel: wobei M { x N } dieauf M angewendeteSubstitution x N ist .

(λx.M)NβM{xN}
M{xN}xNM

Dies ist nicht die vollständige Definition von Beta-Reduktion: Wenn ein Term , kann er Beta-Reduktion bewirken , wenn es Subtermen M und N und eine Variable x gibt, so dass t = ( λ x . M )tMNx ; aber allgemeinerkann t beta-reduzieren,wenn es eine Untermenge t 'gibt, so dass t ' = ( λ x . M )t=(λx.M)Nttt=(λx.M)N . Eine andere Möglichkeit, dies auszudrücken, ist, dass beta-reduzieren kann, wenn es einen Kontext C und einige Terme M und N und eine Variable x gibt, so dass t = C [ ( λ x . M )tCMNx . Bei einer solchen Reduktion ist die rechte Seite C [ M { x N } ] . Um eine formale Notation zu verwenden, wird die Beta-Reduktion durch die folgenden Abzugsregeln definiert: t=C[(λx.M)N]C[M{xN}] Dieselbe Definition kann ausgedrückt werden, indem alle Arten von Kontexten explizit angegeben werden:

(λx.M)NβM{xN}(β)MβNC[M]βC[N](γ)
(λx.M)NβM{xN}(β)MβNλx.Mβλx.N(Cλ)MβNMPβNP(C@<)MβNPMβPN(C@>)

Diese Definition führt zu einer Beta-Reduktion, dh einem Evaluationsbegriff, der die Reduzierung von Subtermen ermöglicht. In Programmiersprachen durchgeführte Berechnungen ermöglichen häufig keine Reduzierung von Untertiteln innerhalb von Funktionen: Die Reduzierungsregel kann nur auf der obersten Ebene oder auf der linken oder rechten Seite einer Anwendung angewendet werden. Das können wir ausdrücken , indem eine neue Art von Kontext zu definieren , die nicht alle syntaktischen Formen erlaubt: Mit dieser Syntax können wir den semantischen Begriff der nicht partiellen Auswertung definieren:

D::=[]xtDDt
Wir könnten diese Definition auch präsentieren, indem wir sie erweitern, wie wir es oben für die vollständige Beta-Reduktion getan haben:
(λx.M)NnpM{xN}MnpND[M]npD[N]
Dwürde als Bewertungskontext bezeichnet, da es zur Definition eines Bewertungsbegriffs verwendet wird. Ein Bewertungskontext ist keine besondere Art von Kontext. Vielmehrist es eine Frage, wofür der Kontext verwendetwird, ihn als Bewertungskontext zu bezeichnen.
(λx.M)NnpM{xN}(β)MnpNMPnpNP(C@<)MnpNPMnpPN(C@>)
D

Ich werde ein weiteres Beispiel für den Kontext geben. Definieren sie Werte gemäß der folgenden Syntax: V : : = x V 1 ... V n | & lgr; x . M Nun wollen wir definieren eine andere Art von Zusammenhängen: E : : = [ ] | MV

V:: =xV1Vnλx.M
E:: =[]MEEV
D
(λx.M)VcbveinM{xV}(βcbvein)MβNE[M]cbveinE[N](γcbvein)

1
Ihre letztere Definition von Bewertungskontexten ist näher an der ursprünglichen Vorstellung von Felleisen und Hieb. Sie sind ein syntaktisches Mittel, um die Bewertungsreihenfolge von Begriffen eines Kalküls auszudrücken. Ein Bewertungskontext ist eine besondere Art von Kontext, da er es ermöglicht, einen Begriff eindeutig in einen Kontext und einen Redex (wenn möglich) zu zerlegen, wodurch deterministisch angegeben wird, wo der nächste Reduktionsschritt erfolgen soll.
Dave Clarke

@ DaveClarke Nebenbei können Sie auch Auswertungskontexte verwenden, um die Auswertung für nicht deterministische Begriffe der Berechnung zu definieren, bei denen Sie keine eindeutige Zerlegung in Auswertungskontext und Redex haben.
Martin Berger

@ MartinBerger: In der Tat.
Dave Clarke

@ DaveClarke Meinen Sie "ein deterministischer Bewertungskontext ist eine besondere Art von Kontext"? Ich kann eine beliebige Menge von Kontexten nehmen und darauf basierend eine Bewertungsstrategie definieren.
Gilles 'SO - hör auf böse zu sein'

@Gilles: Bewertungskontexte können eine deterministische Reduktionsstrategie definieren. Ich glaube nicht, dass ich den Ausdruck "deterministischer Bewertungskontext" gesehen habe. Sie sind natürlich eine besondere Art von Kontext. Ich stimme Ihrem Kommentar zu. Es geht vielmehr darum, dass Ihre Antwort die historische Bedeutung von Bewertungskontexten verfehlt, die einen deterministischen Begriff der Reduktion definieren sollten.
Dave Clarke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.