Boolesche Algebra kann auf diese Weise (zum Beispiel) in nicht typisierter Lambda-Rechnung ausgedrückt werden.
true = \t. \f. t;
false = \t. \f. t;
not = \x. x false true;
and = \x. \y. x y false;
or = \x. \y. x true y;
Auch die Boolesche Algebra kann in System F folgendermaßen codiert werden :
CBool = All X.X -> X -> X;
true = \X. \t:X. \f:X. t;
false = \X. \t:X. \f:X. f;
not = \x:CBool. x [CBool] false true;
and = \x:CBool. \y:CBool. x [CBool] y false;
or = \x:CBool. \y:CBool. x [CBool] true y;
Gibt es eine Möglichkeit, Boolesche Algebra in einfach getippter Lambda-Rechnung auszudrücken? Ich gehe davon aus, dass die Antwort NEIN ist. ( Zum Beispiel sind Vorgänger und Listen in einfach getippten Lambda-Berechnungen nicht darstellbar .) Wenn die Antwort in der Tat NEIN lautet, gibt es eine einfache intuitive Erklärung, warum es unmöglich ist, Boolesche Werte in einfach getippten Lambda-Berechnungen zu kodieren?
UPDATE: Wir gehen davon aus, dass es Basistypen gibt.
UPDATE: Die negative Antwort mit Erklärung wurde hier gefunden (Kommentar "Hier ist eine Beweisskizze, die zeigt, dass einfach getippte Lambda-Kalküle mit Produkten und unendlich vielen Basistypen keine Booleschen Werte enthält.") Dies ist, wonach ich gesucht habe.
quelle
Antworten:
Das OP schrieb oben, dass die Frage durch einen Beitrag auf @ AndrejBauers Blog beantwortet wird .
quelle