พีชคณิตแบบบูลสามารถแสดงในแลมบ์ดา caclulus ที่พิมพ์ได้หรือไม่?


15

พีชคณิตแบบบูลสามารถแสดงในแคลคูลัสแลมบ์ดาที่ไม่ได้พิมพ์ใน (เช่น) ด้วยวิธีนี้

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;

พีชคณิตแบบบูลสามารถเข้ารหัสใน System F ด้วยวิธีนี้ :

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;

มีวิธีในการแสดงพีชคณิตแบบบูลในแคลคูลัสแลมบ์ดาที่พิมพ์หรือไม่? ฉันคิดว่าคำตอบคือไม่ ( ตัวอย่างเช่นผู้บุกเบิกและรายชื่อไม่ได้เป็นตัวแทนในแลมบ์ดาแคลคูลัสเพียงพิมพ์ ) หากคำตอบคือไม่แน่นอนมีคำอธิบายที่เข้าใจง่ายง่ายทำไมมันเป็นไปไม่ได้ที่จะเข้ารหัสบูลีนในแคลคูลัสแลมบ์ดา

UPDATE: เราคิดว่ามีประเภทฐาน

UPDATE: พบคำตอบเชิงลบพร้อมคำอธิบายที่นี่ (ความคิดเห็น "นี่คือภาพร่างหลักฐานเพื่อแสดงให้เห็นว่าแคลคูลัสแลมบ์ดาที่พิมพ์ด้วยผลิตภัณฑ์และประเภทฐานจำนวนมากไม่มีอนันต์") นี่คือสิ่งที่ฉันกำลังมองหา


2
ลองพิมพ์คำจำกัดความลงใน Haskell แล้วดูว่าเกิดอะไรขึ้นเมื่อคุณกำหนดประเภทให้กับนิพจน์ต่างๆ คุณจะเห็นว่ารหัสนั้นต้องอาศัยความแตกต่างอย่างมาก
Dave Clarke

2
ขออภัยที่มีความคิดเพ้อเจ้อ แต่คำถามเกี่ยวกับนิพจน์ของสิ่งนี้หรือแคลคูลัสนั้นมีความหมายเฉพาะกับความเข้าใจที่ชัดเจนของสิ่งที่คุณหมายถึงโดย "แสดงออก", "เข้ารหัส" และ "แสดง" เนื่องจากมีหลายวิธีที่สมเหตุสมผลในการทำความเข้าใจคำเหล่านี้ นอกจากนี้เนื่องจากคุณกำหนดเงื่อนไขการดำรงอยู่ของประเภทฐานคุณจะต้องมีความเฉพาะเจาะจงเกี่ยวกับสิ่งที่เป็นและสิ่งที่พวกเขาสร้าง / destructors
Martin Berger

3
ขออภัยที่ฉันไม่อวดรู้ คำตอบอยู่ที่นี่: math.andrej.com/2009/03/21/ …
Ilya Klyuchnikov

3
ฉันรู้สึกว่าฉันควรจะได้รับเครดิตสำหรับการใช้งานบล็อกที่ดีเช่น :-)
Andrej Bauer

7
OB=OOOเสื้อRยูอี=λx:O.λY:O.xaล.sอี=λx:O.λY:O.Ynโอเสื้อ=λa:B.λx:O.λY:O.aYxand=λa:B.λ:B.λx:O.λY:O.a(xY)Yor=λa:B.λb:B.λx:O.λy:O.ax(bxy)

คำตอบ:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.