Czy algebrę boolowską można wyrazić prostym typem lambda caclulus?


15

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.


2
Spróbuj wpisać definicje w Haskell i zobacz, co się stanie, gdy dodasz typy do różnych wyrażeń. Przekonasz się, że kod w dużej mierze opiera się na polimorfizmie.
Dave Clarke

2
Przepraszam, że jestem pedantyczny, ale pytania o ekspresję tego lub tego rachunku różnobarwnego stają się znaczące tylko dzięki jasnemu zrozumieniu tego, co rozumiesz przez „wyrażony”, „zakodowany” i „reprezentowany”, ponieważ istnieje wiele rozsądnych sposobów zrozumienia tych terminów. Co więcej, skoro określasz istnienie typów bazowych, musisz sprecyzować, co to są i jakie konstruktory / destruktory pochodzą.
Martin Berger

3
Przepraszam, że nie byłem pedantyczny. Odpowiedź znaleziono tutaj: math.andrej.com/2009/03/21/...
Ilya Klyuchnikov

3
Wydaje mi się, że powinienem trochę podziękować za prowadzenie tak fajnego bloga :-)
Andrej Bauer

7
Ob=OOOtrumi=λx:O.λy:O.xfazalsmi=λx:O.λy:O.ynot=λza:b.λx:O.λy:O.zayxzanre=λza:b.λb:b.λx:O.λy:O.za(bxy)yor=λza:b.λb:b.λx:O.λy:O.zax(bxy)

Odpowiedzi:


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.