A álgebra booleana pode ser expressa em cálculo lambda sem tipo (por exemplo) desta maneira.
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;
Também a álgebra booleana pode ser codificada no Sistema F desta maneira :
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;
Existe uma maneira de expressar a álgebra booleana no cálculo lambda simplesmente digitado? Presumo que a resposta seja NÃO. ( Por exemplo, Predecessor e listas não são representáveis no cálculo lambda simplesmente digitado .) Se a resposta for NÃO, existe uma explicação intuitiva simples, por que é impossível codificar booleanos no cálculo lambda simplesmente digitado?
ATUALIZAÇÃO: Assumimos que existem tipos de base.
ATUALIZAÇÃO: A resposta negativa com explicação foi encontrada aqui (Comentário "Aqui está um esboço de prova para mostrar que o cálculo lambda de tipo simples com produtos e infinitamente muitos tipos de base não possui booleanos.") Era isso que eu estava procurando.
fonte
Respostas:
The OP wrote above that the question is answered by a post on @AndrejBauer's blog.
fonte