Gibt es Techniken zum Lösen von Funktionsgleichungen für unbekannte Funktionen in der Lambda-Rechnung?
Angenommen, ich habe die Identitätsfunktion ausführlich als solche definiert:
(das heißt, durch das Schreiben eine Gleichung für das erwartete Verhalten dieser Funktion nach unten) , und jetzt will ich es lösen durch eine algebraische Transformation macht die intensionalen Formel für diese Funktion zu erhalten:
Das zeigt, wie genau die Funktion das tut, was erwartet wurde (dh wie sie in der Lambda-Rechnung implementiert wird).
Natürlich dient die Identitätsfunktion nur als Beispiel. Ich interessiere mich für allgemeinere Methoden zum Lösen solcher Gleichungen. Insbesondere möchte ich eine Funktion , die die folgende Anforderung erfüllt:
das heißt, "injiziert" die gegebene Funktion in die gegebene Lambda-Funktion vor ihrem "Körper" (was ein beliebiger Lambda-Ausdruck ist), möglicherweise indem sie zerlegt und eine neue konstruiert wird, so dass sie wird Ein Parameter, auf den die Funktion angewendet wird.
quelle
Ich glaube, ich habe eine teilweise Antwort bezüglich der Gleichung mit der Identitätsfunktion:
Wir wollen es lösen, indem wir die Formel für , die die Form ( λ p . M ) mit einem noch unbekannten Ausdruck M als Körper hat. Ersetzen wir es in der ursprünglichen Gleichung durch I :I (λp.M) M I
wende dann die Funktion auf auf der linken Seite an:x
Aber was haben wir hier? :> Diese Gleichung ist die Formel für den Ausdruck , nach dem wir suchen, nachdem wir jedes Vorkommen von p durch x ersetzt haben , und sie besagt, dass es danach wie auf der rechten Seite aussehen soll :) Mit anderen Worten, die Funktion we suchten ist:M p x
welches ist natürlich die richtige antwort :)
Versuchen wir den gleichen Ansatz, um die Formel für den Kombinator zu finden. Wir möchten, dass es so funktioniert, dass es, wenn es auf sich selbst angewendet wird, sich selbst erzeugt, wenn es auf sich selbst angewendet wird:ω
Lassen Sie uns nun die Formel für finden, die für einen noch unbekannten Ausdruck M die Form ( λ x . M ) hat . Wenn wir dies in die Gleichung einsetzen, erhalten wir:ω (λx.M) M
Wenn Sie es auf den Parameter auf der linken Seite anwenden, erhalten Sie die Formel für :M
Dies besagt , dass nach jedem Auftreten des Ersetzens in M mit ω er hergestellt ωx M ω , also können wir schließen, dass der ursprüngliche Ausdruck M vor der Substitution x gewesen sein sollteωω M , also sollte die gesuchte Funktion so aussehen:xx
was in der Tat der Fall ist :)
Ich habe jedoch das Gefühl, dass es so einfach werden könnte, nur weil die rechte Seite bereits in der Form war, nach der wir suchen.
quelle