L'algèbre booléenne peut être exprimée dans le calcul lambda non typé de cette manière (par exemple).
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;
L'algèbre booléenne peut également être encodée dans le système F de cette manière :
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-t-il un moyen d'exprimer l'algèbre booléenne dans un calcul lambda simplement tapé? Je suppose que cette réponse est NON. ( Par exemple, le prédécesseur et les listes ne sont pas représentables dans le lambda-calcul simplement tapé .) Si la réponse est NON, existe-t-il une explication intuitive simple, pourquoi il est impossible de coder des booléens dans un lambda-calcul simplement tapé?
MISE À JOUR: Nous supposons qu'il existe des types de base.
MISE À JOUR: La réponse négative avec explication a été trouvée ici (Commentaire "Voici un croquis de preuve pour montrer que le calcul lambda simplement tapé avec des produits et une infinité de types de base n'a pas de booléens.") C'est ce que je cherchais.
la source
Réponses:
L'OP a écrit ci-dessus que la question est répondue par un post sur le blog de @ AndrejBauer .
la source