L'algebra booleana può essere espressa in un semplice lambda caclulus?


15

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.


2
Prova a digitare le definizioni in Haskell e vedi cosa succede quando dai tipi a varie espressioni. Vedrai che il codice si basa fortemente sul polimorfismo.
Dave Clarke,

2
Mi dispiace essere pedante, ma le domande sull'espressività di questo o quel calcolo diventano significative solo con una chiara comprensione di ciò che intendi con "espresso", "codificato" e "rappresentato", poiché esistono molti modi ragionevoli per comprendere questi termini. Inoltre, poiché stipuli l'esistenza di tipi di base, dovresti essere specifico su cosa siano e su quali costruttori / distruttori provengano.
Martin Berger,

3
Scusa se non ero pedante. La risposta è stata trovata qui: math.andrej.com/2009/03/21/…
Ilya Klyuchnikov

3
Sento che dovrei avere un po 'di credito per la gestione di un blog così elegante :-)
Andrej Bauer,

7
B = O O O t r u e = λ x : O . λ y : O . x f un l s e = λ x : O . λ y : O . yOB=OOOtrue=λx:O.λy:O.xfalse=λx:O.λy:O.ynot=λa:B.λx:O.λy:O.ayx , o R = λ un : B . λ B : B . λ x : O .and=λa:B.λb:B.λx:O.λy:O.a(bxy)yor=λa:B.λb:B.λx:O.λy:O.ax(bxy)

Risposte:


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.