Algebra boolowska może być wyrażona w ten sposób bez typu rachunku lambda (na przykład).
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;
Również algebra boolowska może być zakodowana w Systemie F w następujący sposób :
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;
Czy istnieje sposób na wyrażenie algebry boolowskiej w prostym typie rachunku lambda? Zakładam, że odpowiedź brzmi NIE. ( Na przykład Poprzednik i listy nie są reprezentowalne w prostym typie rachunku lambda .) Jeśli odpowiedź brzmi NIE, to czy istnieje proste intuicyjne wyjaśnienie, dlaczego nie można zakodować boolanów w prostym typie rachunku lambda?
AKTUALIZACJA: Zakładamy, że istnieją typy podstawowe.
AKTUALIZACJA: Znaleziono tutaj odpowiedź negatywną z wyjaśnieniem (komentarz „Oto szkic dowodu, który pokazuje, że prosty rachunek różniczkowy lambda z produktami i nieskończenie wieloma typami podstawowymi nie ma boolanów”). Właśnie tego szukałem.
źródło
Odpowiedzi:
OP napisał powyżej, że na pytanie odpowiada post na blogu @ AndrejBauer .
źródło