Ich hätte gerne ein Beispiel für ein Quin in reinem Lambda-Kalkül . Ich war ziemlich überrascht, dass ich durch googeln keinen finden konnte. Die Quine-Seite listet Quines für viele "echte" Sprachen auf, jedoch nicht für die Lambda-Rechnung.
Dies bedeutet natürlich, zu definieren, was ich mit einem Quin im Lambda-Kalkül meine, was ich unten tue. (Ich bitte um etwas ganz bestimmtes.)
An einigen Stellen, z. B. bei Larkin und Stocks (2004), sehe ich das Folgende als einen "selbstreplizierenden" Ausdruck zitiert: . Dies reduziert sich nach einem einzigen Beta-Reduktionsschritt auf sich selbst und verleiht ihm ein irgendwie quineartiges Gefühl. Es ist jedoch insofern ungewöhnlich, als es nicht beendet wird: Weitere Beta-Reduktionen produzieren weiterhin den gleichen Ausdruck, sodass es niemals auf die normale Form reduziert wird. Für mich ist ein Quine ein Programm, das sich selbst beendet und ausgibt, und daher möchte ich einen Lambda-Ausdruck mit dieser Eigenschaft.
Natürlich ist jeder Ausdruck, der keine Redexes enthält, bereits in normaler Form und wird sich daher selbst beenden und ausgeben. Aber das ist zu trivial. Daher schlage ich die folgende Definition vor, in der Hoffnung, dass eine nicht triviale Lösung zugelassen wird:
Definition (vorläufig): Ein Quine im Lambda-Kalkül ist ein Ausdruck der Form
Angesichts der Tatsache, dass der Lambda-Kalkül genauso aussieht wie jede andere Sprache, scheint dies möglich zu sein, aber mein Lambda-Kalkül ist rostig, sodass ich mir kein Beispiel vorstellen kann.
Referenz
James Larkin und Phil Stocks. (2004) "Selbstreplizierende Ausdrücke in der Lambda-Rechnung" Konferenzen in Forschung und Praxis in der Informationstechnologie, 26 (1), 167-173. http://epublications.bond.edu.au/infotech_pubs/158
quelle
Antworten:
Sie möchten einen Begriff , so dass ∀ M & egr ; & Lgr; :Q. ∀ M& egr ; & Lgr;
Ich werde nicht weiter einschränken (z. B. in Bezug auf seine Form und ob es normalisiert) und ich werde Ihnen zeigen, dass es definitiv nicht normalisiert sein muss.Q.
Angenommen, ist in normaler Form. Wählen Sie M ≡ x (wir können dies tun, weil der Satz für alle M gelten muss ). Dann gibt es drei Fälle.Q. M≡ x M
Wenn also ein solches existiert, kann es nicht in normaler Form vorliegen.Q
Der Vollständigkeit halber suppose hat eine normale Form, ist aber nicht in Normalform (vielleicht ist es schwach Normalisieren ist), dh ∃ N & egr ; & bgr; -nf mit N ≢ Q , so dass ∀ M & egr ; & Lgr; : Q M ⊳ & bgr; Q ⊳ & bgr; NQ ∃N∈β-nf N≢Q ∀M∈Λ
Dann muss mit auch eine Reduktionsfolge Q x ⊳ β N x ⊳ β N existieren , weil:M≡x Qx⊳βNx⊳βN
Beachten Sie jedoch, dass durch das obige Argument (1) nicht möglich ist, sodass unsere Annahme, dass Q eine normale Form hat, nicht haltbar ist.Nx⊳βN Q
Wenn wir ein solches zulassen , sind wir sicher, dass es nicht normalisierend sein darf. In diesem Fall können wir einfach einen Kombinator verwenden, der alle Argumente eliminiert, die er erhält. Denis Vorschlag funktioniert gut: Q ≡ ( λ z . ( Λ x . Λ z . ( X x ) ) ( λ x . Λ z . ( X x ) ) ) Dann in nur zwei β -Reduktionen: Q MQ
Dieses Ergebnis ist nicht sehr überraschend, da Sie im Wesentlichen nach einem Begriff fragen, der alle Argumente beseitigt, und dies ist etwas, das ich oft als direkte Anwendung des Festkomma-Theorems erwähne.
quelle
Einerseits ist dies unmöglich, da ein Quine seinen eigenen Code ausgeben soll und der reine Lambda-Kalkül keine Möglichkeit zur Ausgabe hat.
Wenn Sie andererseits annehmen, dass der resultierende Term die Ausgabe ist, ist jede normale Form eine Quine.
quelle
Hier ist ein Vorschlag:
quelle
if z==p then return q, otherwise return q