Чи може булева алгебра виражатись просто набраним лямбдальним виключенням?


15

Булева алгебра може бути виражена в нетипізованому обчисленні лямбда (наприклад) таким чином.

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;

Також булева алгебра може бути закодована в System F таким чином :

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;

Чи є спосіб виразити булеву алгебру просто набраним лямбдальним численням? Я припускаю, що відповідь "НІ". ( Наприклад, попередник та списки не є представленими просто набраними лямбда-численнями .) Якщо відповідь дійсно НЕ, чи є просте інтуїтивне пояснення, чому неможливо кодувати булеві просто введені лямбда-числення?

ОНОВЛЕННЯ: Ми припускаємо, що існують базові типи.

ОНОВЛЕННЯ: Негативну відповідь із поясненням знайдено тут (коментар "Ось ескіз на доказ, який показує, що в простому введенні обчислення лямбда з продуктами та нескінченною кількістю базових типів немає булевих".) Це те, що я шукав.


2
Спробуйте ввести визначення в Haskell і подивіться, що станеться, коли ви надаєте типи різним виразам. Ви побачите, що код сильно покладається на поліморфізм.
Дейв Кларк

2
Вибачте за педантичність, але питання щодо виразності того чи іншого обчислення стають значущими лише при чіткому розумінні того, що ви маєте на увазі під «вираженим», «закодованим» та «представленим», оскільки існує кілька розумних способів розуміння цих термінів. Більше того, оскільки ви заявляєте про існування базових типів, вам потрібно буде конкретизувати, що це таке, і які конструктори / деструктори вони приходять.
Мартін Бергер

3
Вибачте, що я не був педантичним. Відповідь знайдено тут: math.andrej.com/2009/03/21/…
Ілля Ключников

3
Я відчуваю, що мені слід отримати кредит для ведення такого витонченого блогу :-)
Андрій Бауер

7
ОБ=ОООтrуе=λх:О.λу:О.хfалсе=λх:О.λу:О.унот=λа:Б.λх:О.λу:О.ауханг=λа:Б.λб:Б.λх:О.λу:О.а(бху)уоr=λа:Б.λб:Б.λх:О.λу:О.ах(бху)

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.