Gibt es einen Unterschied zwischen

11

Ich lerne gerade den Lambda-Kalkül und habe mich über die folgenden zwei verschiedenen Arten des Schreibens eines Lambda-Begriffs gewundert.

  1. λxy.xy
  2. λx.λy.xy

Gibt es einen Unterschied in der Bedeutung oder der Art und Weise, wie Sie die Beta-Reduktion anwenden, oder sind dies nur zwei Möglichkeiten, um dasselbe auszudrücken?

Besonders diese Definition der Paarbildung hat mich gefragt:

Paar = λxy.λp.pxy

großmütig
quelle

Antworten:

15

Dies sind nur Unterschiede in den Notationen. ist die Abkürzung für λ x . λ y . λ z . t . Keine Magie hier.λxyz.tλx.λy.λz.t

In der Tat ist aber Sie neigen dazu, dieses Paar zu betonenpair=λxyp.pxy ist eine Funktion λ p . p t u durch Ändern der Art und Weise, wie Sie die Definition schreiben. Aber es ist wirklich dasselbe.pairtuλp.ptu

jmad
quelle
17

Das erste ist eine Abkürzung für das zweite. Es ist eine übliche syntaktische Konvention, Ausdrücke zu verkürzen.

Wenn Sie dagegen Tupel in der Sprache haben, gibt es einen Unterschied zwischen

  1. undλx.λy.xy
  2. .λ(x,y).xy

Im ersteren Fall kann ich der Funktion ein einzelnes Argument geben und die resultierende Funktion an andere Funktionen weitergeben. Im letzteren Fall müssen beide Argumente gleichzeitig angegeben werden. Es gibt natürlich eine Funktion, die angewendet werden kann, um 1 in 2 umzuwandeln und umgekehrt. Dieser Vorgang wird als (Un-) Currying bezeichnet .

Die Definition des von Ihnen erwähnten ist eine Kodierung des Begriffs der Paare in den λ- Kalkül und nicht der Paare als primitiver Datentyp (wie ich oben angedeutet habe).pairλ

Dave Clarke
quelle
2

Das Transformieren einer Funktion, die mehrere Argumente in eine Funktionskette mit einzelnen Argumenten umwandelt, wird als Currying bezeichnet . Die beiden Funktionen sind im Wesentlichen gleich.

Wikipedia-Artikel über Curry

Ghassen Hamrouni
quelle
8
λxy.xyλx.λy.xy