Ich verstehe, dass eine Kirchenzahl wie λ s aussieht . λ z . s (... n mal ...) s . Dies bedeutet nichts anderesals „die Funktion s Applied n - mal auf die Funktion z “.
Eine mögliche Definition der Funktion ist die folgende: t i m e s = λ m . λ n . λ s . m . Wenn ich den Körper betrachte, verstehe ich die Logik hinter der Funktion. Wenn ich jedoch mit der Bewertung beginne, stecke ich fest. Ich werde es anhand eines Beispiels veranschaulichen:
Nun, in dieser Situation, wenn ich mich zuerst bewerbe , ich komme zum gewünschten Ergebnis. Wenn ich mich jedoch bewerbe ( λ z . S. Erstens bekomme ich, wie ich sollte, weil die Anwendung von links assoziativ ist, ein falsches Ergebnis:
Ich kann das nicht mehr reduzieren. Was mache ich falsch? Das Ergebnis sollte
Antworten:
Ich denke, Ihre Reduzierung ist korrekt (ich habe sie jedoch nur angesehen). Am Ende können Sie nicht auf z anwenden , dies erscheint nie im Begriff. λ z . f f z ist λ z . ( f f ) z , nicht λ z . f ( f z ) . Funktionen in der Lambda-Rechnung nehmen ein einziges Argument an; Sie sind effektiv Curry(λz.sssz) z λz.ffz λz.(ff)z λz.f(fz) : Eine Funktion mit zwei Argumenten wird als Funktion mit einem Argument implementiert, die das erste Argument verwendet und eine neue Funktion mit einem Argument zurückgibt, die das zweite Argument verwendet und das Ergebnis zurückgibt.
Sie haben den gleichen Fehler gemacht, als Sie die Ziffern der Kirche definiert haben. Die Kirchenzahl für basiert auf der n- fachen Zusammensetzung einer Funktion . "Die Funktion s wird n- mal auf die Funktion z angewendet " λ s . λ z . s ( s ( … sn n s n z . Was Sie geschrieben haben, ist die Funktion s, die n - 1 Mal auf die Funktion s und schließlich auf z angewendet wird, was mir nicht als nützlicher Begriff erscheint.λs.λz.s(s(…sz)…)) s n−1 s z
ist somit ( λ m n s . M ( n s ) ) ( λ s z . S ( s2×3 (λmns.m(ns))(λsz.s(sz))(λsz.s(s(sz))) λsz.s(s(s(s(s(sz)))))
quelle