L'algebra booleana può essere espressa in un calcolo lambda non tipizzato in (ad esempio) in questo modo.
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;
Anche l'algebra booleana può essere codificata nel Sistema F in questo modo :
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;
C'è un modo per esprimere l'algebra booleana nel calcolo lambda semplicemente tipizzato? Presumo che la risposta sia NO. ( Ad esempio, il predecessore e gli elenchi non sono rappresentabili in semplici lambda-calculus .) Se la risposta è davvero NO, esiste una semplice spiegazione intuitiva, perché è impossibile codificare i booleani in semplici calcoli lambda?
AGGIORNAMENTO: supponiamo che ci siano tipi di base.
AGGIORNAMENTO: La risposta negativa con spiegazione è stata trovata qui (Commento "Ecco uno schizzo di prova per mostrare che il calcolo lambda semplicemente digitato con prodotti e infinitamente molti tipi di base non ha valori booleani.") Questo è quello che stavo cercando.