ภาษาโปรแกรมที่มีฟังก์ชั่นมาตรฐาน


29

มีภาษาการเขียนโปรแกรม (การทำงานหรือไม่) ที่ฟังก์ชั่นทั้งหมดมีรูปแบบที่ยอมรับได้หรือไม่? นั่นคือฟังก์ชั่นใด ๆ สองฟังก์ชันที่ส่งกลับค่าเดียวกันสำหรับชุดอินพุตทั้งหมดแสดงด้วยวิธีเดียวกันเช่นถ้า f (x) ส่งกลับ x + 1 และ g (x) ส่งคืน x + 2 จากนั้น f (f (x (x) )) และ g (x) จะสร้างไฟล์เรียกทำงานที่ไม่สามารถแยกได้เมื่อรวบรวมโปรแกรม

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

พื้นหลังของฉันค่อนข้าง จำกัด ดังนั้นฉันจึงต้องการแหล่งที่มากับสิ่งที่จำเป็นต้องมีน้อยกว่า แต่การอ้างอิงถึงแหล่งข้อมูลขั้นสูงอาจจะเท่เช่นกันเพราะฉันรู้ว่าฉันต้องการทำงานต่อ

คำตอบ:


38

ขอบเขตที่เป็นไปได้จริง ๆ แล้วเป็นคำถามเปิดที่สำคัญในทฤษฎีของแคลคูลัสแลมบ์ดา นี่คือบทสรุปโดยย่อของสิ่งที่รู้จักกัน:

  • แคลคูลัสแลมบ์ดาที่เรียบง่ายพิมพ์ด้วยหน่วยผลิตภัณฑ์และพื้นที่ฟังก์ชั่นจะมีคุณสมบัติรูปแบบที่ยอมรับได้ สองเทอมจะเท่ากันถ้าหากมันมีรูปแบบเบต้า - ปกติ การคำนวณรูปแบบปกติเหล่านี้ค่อนข้างตรงไปตรงมา

  • การเพิ่มประเภทผลรวมทำให้เกิดปัญหาอย่างมาก ปัญหาความเท่าเทียมกันยังคงสามารถตัดสินใจได้ (คำสำคัญในการค้นหาคือ "coproduct equality") แต่อัลกอริธึมที่รู้จักใช้งานได้ด้วยเหตุผลที่ยุ่งยากมากและสำหรับความรู้ของฉัน นี่คือสี่วิธีที่ฉันรู้:

  • การเพิ่มประเภทที่ไม่ได้ จำกัด เช่นจำนวนธรรมชาติทำให้ไม่สามารถระบุปัญหาได้ โดยทั่วไปคุณสามารถเข้ารหัสปัญหาที่สิบของฮิลแบร์ตได้แล้ว

  • การเพิ่มการเรียกซ้ำทำให้เกิดปัญหาที่ไม่สามารถตัดสินใจได้เนื่องจากการมีรูปแบบปกติจะทำให้สามารถตัดสินใจได้อย่างเท่าเทียมกันและนั่นจะช่วยให้คุณแก้ปัญหาการหยุดชะงักได้


กระดาษนี้ขยายความเท่าเทียมกันกับ coproducts เพื่อเทียบเท่ากับผลรวม แต่ไม่มีรูปแบบบัญญัติแบบบัญญัติ "เดี่ยว" คุณเลือก "ฟังก์ชั่นความอิ่มตัว" ที่ฉลาดพอที่จะตรวจจับเมื่อคำสองคำที่คุณเปรียบเทียบมีคำว่าเท็จ มันคล้ายกับ Ahmed-Licata-Harper ที่สุดซึ่งทั้งคู่ใช้การโฟกัส
สูงสุดใหม่

มีเพียงหน่วยผลิตภัณฑ์และฟังก์ชั่นความสำคัญของสิ่งใดก็ตามที่คุณสามารถจดบันทึกได้คือ 1 ในขณะที่ถ้าคุณบวกจำนวนเงินคุณก็จะได้รับประโยชน์ที่แตกต่างกันมากมาย (และสามารถใช้ "การคำนวณที่มีประโยชน์") ข้อเท็จจริงเหล่านี้เกี่ยวข้องหรือไม่
glaebhoerl

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