Frei und gebunden im Lambda-Kalkül

7

Hier ist etwas aus Slonnegers "Syntax und Semantik von Programmiersprachen":

Eine Variable kann sowohl gebunden als auch frei im selben Lambda-Ausdruck vorkommen: Beispielsweise ist in λx.yλy.yx das erste Auftreten von y frei und die anderen beiden sind gebunden.

Ich gehe davon aus, dass die freie Variable das y direkt nach dem λx ist. und die gebundenen ys sind die λy.y, die ich intuitiv erfassen kann. Also würde ((λx.yλy.yx) a) b) auf (yλy.ya) b) und dann auf bba reduzieren? Kann jemand erklären, wie es dazu kam? Am Ende ist es der Ausdruck b zweimal. Kann jemand vielleicht mehr Beispiele für gebundene und freie Variablen liefern?


quelle
Ich denke, Slonneger hat dort kein gutes Beispiel verwendet, da leicht als falsch verstanden werden kann , was normalerweise für . Ich würde ein anderes Beispiel geben: In ist das letzte Vorkommen von frei und die anderen sind gebunden. λx.yλxyλx.λy(λx.λy.xyx)xx
Jay

Antworten:

11

Ich habe Klammern hinzugefügt, um Das rote ist frei und das blaue ist frei gebunden durch die grüne Abstraktion. Ich denke nicht, dass es Sinn macht zu sagen, dass das grüne gebunden ist, aber es ist zusammen mit dem Lambda ein Bindemittel.

λx.(y(λy.(yx)))
yy

Wir können die Laufzeit einmal Beta reduzieren

λx.(y(λy.(yx)))einbβ(y(λy.(yein)))b

aber nicht weiter, da keine verbleibenden Redexes mehr übrig sind.


quelle