Aljabar Boolean dapat diekspresikan dalam kalkulus lambda yang tidak diketik dalam (misalnya) dengan cara ini.
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;
Aljabar boolean juga dapat dikodekan dalam Sistem F dengan cara ini :
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;
Apakah ada cara untuk mengekspresikan aljabar boolean dalam kalkulus lambda yang diketik sederhana? Saya berasumsi bahwa jawabannya adalah TIDAK. ( Misalnya, Pendahuluan dan daftar tidak dapat diwakili dalam kalkulus lambda yang diketik sederhana .) Jika jawabannya memang TIDAK, apakah ada penjelasan intuitif sederhana, mengapa tidak mungkin untuk menyandikan boolean di kalkulus lambda yang diketik sederhana?
PEMBARUAN: Kami berasumsi bahwa ada tipe dasar.
UPDATE: Jawaban negatif dengan penjelasan ditemukan di sini (Komentar "Di sini adalah sketsa bukti untuk menunjukkan bahwa kalkulus lambda yang diketik dengan produk dan banyak tipe dasar yang tidak memiliki boolean.") Inilah yang saya cari.
sumber
Jawaban:
OP menulis di atas bahwa pertanyaan itu dijawab dengan posting di blog @ AndrejBauer .
sumber