Ich habe zwei verschiedene Lambda-Ausdrücke für die logische NOT-Funktion gesehen.
Einer von ihnen wendet seinen Parameter nur auf Konstanten true
und false
intern in umgekehrter Reihenfolge an:
und der andere, der zwei weitere Parameter erfasst, anstatt sie extern an die zurückgegebene Funktion zu übergeben, und auch in umgekehrter Reihenfolge auf sie anwendet :
von denen der andere etwas einfacher erscheint (und es ist auch einfacher, wenn er binär codiert ist).
Meine Frage lautet also:
Gibt es eine Transformation, die mich von einer dieser Darstellungen zur anderen bringen könnte?
Ich sehe, dass sie "extensiv" gleichwertig sind, dh beide führen zu den gleichen Ergebnissen. Aber ich möchte es irgendwie durch algebraische Transformationen "beweisen", wie zum Beispiel für Alpha-, Beta- und Eta-Konvertierungen. Leider kann mir in diesem Fall nichts davon helfen: Alpha dient nur zum Umbenennen. Beta funktioniert nur für Funktionsaufrufe, aber wir haben hier keinen Funktionsaufruf, der reduziert werden könnte, da im Funktionskörper (allerdings nicht im gesamten Ausdruck) in all diesen Ausdrücken frei ist, bis wir tatsächlich etwas aufrufen . Das naheliegendste scheint das eta zu sein, das sich auf die Erweiterungsäquivalenz und die Weiterleitungsparameter bezieht, aber wenn die Parameter umgekehrt werden, ist es keine einfache Weiterleitung mehr und eta scheint hier nicht mehr zuzutreffen.NOT
Gibt es noch eine Konvertierungsregel, die mir fehlt?
(Nun, ich denke, sie werden nicht einfach zwei griechische Buchstaben ohne besonderen Grund überspringen, nicht wahr?)
PS: Diese Frage ist eigentlich eine Modellfrage, da es viele andere Definitionen für andere Funktionen gibt, die verschiedene Formen haben, die weitgehend äquivalent zu sein scheinen, sich jedoch in Bezug auf die bekannten Reduktionsregeln völlig unterscheiden. Ich habe das einfachste Beispiel für dieses Problem ausgewählt.
Bearbeiten:
Um besser zu verdeutlichen, was ich wissen möchte, ist hier ein Diagramm, das die Reduktionsschritte für beide Versionen der not
Funktion zeigt:
http://sasq.comyr.com/Stuff/Lambda/Not.png
Wie Sie sehen können, reduzieren sich beide wirklich auf die gleichen Ergebnisse (im Gegensatz zu dem, was @Jonathan Gallagher unten sagte). Das weiß ich bereits: Sie sind konfluent und daher Church-Rosser-Äquivalent. Was ich jedoch nicht weiß, ist, ob es eine Konvertierungsregel gibt (ähnlich wie Alpha, Beta und Eta), die es mir ermöglichen könnte, eine Form not
in die andere umzuwandeln . Dies würde es mir ermöglichen, zumindest sicherzustellen, dass einige andere Funktionen (komplizierter als diese beiden hier) ebenfalls gleichwertig sind, was schwierig sein könnte, wenn sie auf mehr als nur zwei mögliche Antworten reduziert werden können. Ich würde gerne wissen, ob es eine Konvertierungsregel gibt, die es mir ermöglichen könnte, eine Intensionsdefinition in eine andere zu konvertieren, wennZwei Funktionen sind bereits weitgehend gleichwertig (dh sie liefern dieselben Ergebnisse für dieselben Parameter). Oder (was besser wäre), wenn eine Funktion irgendwie in die andere konvertiert werden kann, auch wenn ich nicht weiß, ob sie im Wesentlichen gleichwertig ist.
quelle
Antworten:
Um zu beweisen, dass die beiden NICHT-Formulare im Allgemeinen nicht gleichwertig sind, müssen Sie lediglich einen Begriff finden, der bei jeder Anwendung ein anderes Ergebnis zurückgibt, z.
quelle
Das erste sei nicht not1 und das zweite not2. Dann haben Sie folgendes:
Nun, wenn wir das annehmen
quelle