มีแคลคูลัสแลมบ์ดาพิมพ์ทัวริงอยู่หรือไม่?


คำตอบ:


37

แน่นอน. แลมบ์ดาแคลคูลัสที่พิมพ์จำนวนมากยอมรับการทำให้เป็นมาตรฐานอย่างยิ่งเงื่อนไขการโดยการออกแบบดังนั้นพวกเขาจึงไม่สามารถแสดงการคำนวณแบบสุ่มได้ แต่ระบบพิมพ์สามารถเป็นอะไรก็ได้ที่คุณชอบ; ทำให้มันกว้างพอและคุณสามารถแสดงการคำนวณที่กำหนดได้ทั้งหมด

ระบบประเภทเล็ก ๆ ที่ครอบคลุมชิ้นส่วนทัวริงสมบูรณ์ของแคลคูลัสแลมบ์ดานั้นเป็นระบบที่ยอมรับทุกคำศัพท์ที่พิมพ์ได้ดี ประเภทบนสุด )

ΓM:

ในทางปฏิบัติภาษาการเขียนโปรแกรมการทำงานแบบคงที่มีแกนแคลคูลัสแลมบ์ดาที่พิมพ์อยู่ในแกนกลางซึ่งช่วยให้ผู้จัดทำcombpointคงที่ ยกตัวอย่างเช่นเริ่มต้นด้วยแคลคูลัสแลมบ์ดาพิมพ์เพียง (หรือระบบการพิมพ์ ML หรือระบบ Fหรือระบบการพิมพ์อื่น ๆ ของทางเลือกของคุณ) และเพิ่มกฎที่ทำให้บาง Combinator fixpoint เหมือนพิมพ์ได้ดี แกมมา: T TY=λf.(λx.f(xx))(λx.(xx))

Γ:TTΓY:TΓ:TTΓ(λx.(xx))(λx.(xx)):T
Y
Γแก้ไข:(TT)Tแก้ไข(แก้ไข)

ติดกับแคลคูลัสแลมบ์ดาบริสุทธิ์ระบบประเภทที่น่าสนใจคือแคลคูลัสแลมบ์ดาที่มีประเภทจุดตัด

ΓM:T1ΓM:T2ΓM:T1T2(ผม)ΓM:(ผม)

ประเภทแยกมีคุณสมบัติที่น่าสนใจเกี่ยวกับการทำให้เป็นมาตรฐาน:

  • คำแลมบ์ดาสามารถพิมพ์ได้โดยไม่ต้องใช้ ผม กฎ iff มันเป็น normalizing อย่างยิ่ง
  • คำแลมบ์ดายอมรับประเภทที่ไม่มี ถ้ามันมีรูปแบบปกติ

ดูลักษณะของคำแลมบ์ดาที่มีประเภทสหภาพเพื่อการเข้าใจอย่างลึกซึ้งว่าเหตุใดประเภทของการแยกจึงมีขอบเขตที่น่าทึ่ง

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

ข้อสังเกตเกี่ยวกับชื่อกฎ (ผม) และ (ผม): พวกเขาไม่มีความหมายอย่างเป็นทางการ แต่พวกเขาถูกเลือกอย่างจงใจ ผม ย่อมาจาก "การแนะนำ" เพราะสิ่งเหล่านี้เป็นกฎการแนะนำ - พวกเขาแนะนำสัญลักษณ์ ( หรือ ) เป็นประเภทด้านล่างบรรทัด ในบางครั้งคุณจะพบกฎการกำจัดเมื่อสัญลักษณ์ปรากฏเหนือเส้น แต่ไม่อยู่ด้านล่าง ตัวอย่างเช่นกฎในการพิมพ์เช็คแลมบ์ดาแลมบ์ในแคลคูลัสแลมบ์ดาที่พิมพ์ง่ายคือกฎการแนะนำสำหรับและกฎในการพิมพ์แอปพลิเคชันเป็นกฎการกำจัด .

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