หากคุณคิดว่า -calculus เป็นรูปแบบที่ดีของภาษาโปรแกรมที่ใช้งานได้คุณอาจคิดว่า: -calculus มีความคิดเรียบง่ายเกี่ยวกับเวลา - ความซับซ้อน: เพียงนับจำนวนของขั้นตอนการหักล้างx]λλβ(λx.M)N→M[N/x]
แต่นี่เป็นการวัดความซับซ้อนที่ดีหรือไม่?
เพื่อตอบคำถามนี้เราควรอธิบายให้ชัดเจนว่าเราหมายถึงอะไรโดยการวัดความซับซ้อนตั้งแต่แรก หนึ่งคำตอบที่ดีนั้นได้รับจากวิทยานิพนธ์ของSlot และ van Emde Boas : การวัดที่ซับซ้อนใด ๆ ควรมีความสัมพันธ์พหุนามกับความเชื่อตามเวลาที่กำหนดโดยใช้เครื่องจักรทัวริง กล่าวอีกนัยหนึ่งควรมีการเข้ารหัส 'สมเหตุสมผล'จากข้อกำหนดของ -calculus ไปยังเครื่องจักรทัวริงเช่นสำหรับพหุนามบางกรณีในแต่ละเทอมขนาด:ลดลงเป็นค่าใน -reduction ขั้นตอนที่แน่นอนเมื่อลดลงเป็นค่าในtr(.)λpM|M|Mp(|M|) βtr(M)p(|tr(M)|)ขั้นตอนของเครื่องทัวริง
เป็นเวลานานมันก็ไม่ชัดเจนว่าสิ่งนี้สามารถทำได้ใน calcul-แคลคูลัส ปัญหาหลักมีดังนี้
- มีคำศัพท์ที่ใช้สร้างแบบฟอร์มปกติ (ในจำนวนพหุนามของขั้นตอน) ที่มีขนาดเอ็กซ์โพเนนเชียล แม้แต่การเขียนแบบฟอร์มปกติก็ต้องใช้เวลาชี้แจง
- กลยุทธ์การลดที่เลือกมีบทบาทสำคัญ ตัวอย่างเช่นมีตระกูลของเทอมที่ลดจำนวนพหุนามของ steps-steps แบบขนาน (ในแง่ของการลด optimal ที่ดีที่สุด ) แต่ความซับซ้อนนั้นไม่ได้อยู่ในระดับประถมศึกษา
กระดาษ " การลดเบต้าเป็นค่าคงที่แน่นอน " โดย B. Accattoli และ U. Dal Lago ให้ความกระจ่างแก่ปัญหาโดยแสดงการเข้ารหัส 'สมเหตุสมผล' ที่รักษาระดับความซับซ้อนPของฟังก์ชันเวลาพหุนามโดยสมมติว่าการลดการโทรโดยชื่อซ้ายสุด . ความเข้าใจที่สำคัญคือการระเบิดแบบเอ็กซ์โปเนนเชียลสามารถเกิดขึ้นได้สำหรับเหตุผล 'ไม่น่าสนใจ' ซึ่งสามารถเอาชนะได้โดยการแบ่งปันที่เหมาะสม กล่าวอีกนัยหนึ่งคลาสPเหมือนกันไม่ว่าคุณจะกำหนดให้นับขั้นตอนของเครื่องจักรทัวริงหรือ (ซ้ายสุด - ด้านนอกสุด) -reductionβ
ฉันไม่แน่ใจว่าสถานการณ์เป็นอย่างไรสำหรับกลยุทธ์การประเมินอื่น ๆ ฉันไม่ทราบว่ามีการใช้โปรแกรมที่คล้ายกันเพื่อความซับซ้อนของพื้นที่