Таким образом, булева алгебра может быть выражена в нетипизированном лямбда-исчислении .
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;
Также булева алгебра может быть закодирована в Системе 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;
Есть ли способ выразить булеву алгебру в простом типе лямбда-исчисления? Я предполагаю, что ответ НЕТ. ( Например, Предшественник и списки не могут быть представлены в простом типе лямбда-исчисления .) Если ответ действительно НЕТ, есть ли простое интуитивное объяснение, почему невозможно кодировать логические значения в просто типизированном лямбда-исчислении?
ОБНОВЛЕНИЕ: Мы предполагаем, что есть базовые типы.
ОБНОВЛЕНИЕ: здесь был найден отрицательный ответ с объяснением (комментарий «Вот эскиз для доказательства того, что лямбда-исчисление простого типа с продуктами и бесконечным числом базовых типов не имеет логических значений».) Это то, что я искал.
источник
Ответы:
ОП писал выше, что на этот вопрос отвечает сообщение в блоге @ AndrejBauer .
источник