มีปัญหาใด ๆ ที่ไม่สามารถแก้ไขได้ด้วย oracle ที่หยุดนิ่งหรือไม่?


11

ฉันเข้าใจว่าปัญหาส่วนใหญ่ไม่สำคัญหากมี oracle หยุดทำงาน (หรือฉันคิดว่าการคำนวณแบบไฮเปอร์) อย่างไรก็ตามการใช้อาร์กิวเมนต์ที่แสดงปัญหาการหยุดชะงักเป็นไปไม่ได้สำหรับเครื่องทัวริงยังแสดงให้เห็นว่าเป็นไปไม่ได้สำหรับ Oracle + ทัวริงในการตัดสินปัญหาการหยุดชะงักสำหรับ Oracle + ทัวริง มีตัวอย่างของปัญหาที่เกิดขึ้นจริงหรือใช้งานจริงที่ไม่สามารถแก้ไขได้ด้วย oracle หยุดทำงานหรือไม่?

หมายเหตุ: โดย "oracle" ฉันหมายถึง oracle สำหรับเครื่องทัวริงมาตรฐานไม่ใช่ TM ที่มี oracle นั้น


2
มีมีปัญหา "ที่ตัดสินไม่ได้โดยพลการ" เห็นเช่นที่นี่ ฉันไม่รู้เกี่ยวกับตัวอย่าง "ใช้งานจริง" (ซึ่งไม่ตรงกับชื่อที่คุณเลือก); สิ่งที่มีคุณสมบัติเป็น "ปฏิบัติ" สำหรับคุณหรือไม่
Raphael

ไม่ได้มีไว้เพื่อตอบคำถามนี้ ฉันยอมรับว่ายังคงมีปัญหาการหยุดชะงักในระดับต่อไป
ike

นอกจากนี้ทุกภาษาที่ไม่นับซ้ำจะไม่ถูกลดลงเป็น HALT ตัวอย่างรวมถึง FINITE, EMPTY ว่า CFG สองภาษานั้นได้รับมาจากภาษาเดียวกันหรือไม่

คำตอบ:


15

เพียงแค่ใช้ปัญหาที่ระดับทัวริงอยู่เหนือซึ่งเป็นระดับของ The Halting Oracle ในแง่ของการลำดับชั้นของคณิตศาสตร์ที่คุณต้องการให้เกิดปัญหาดังกล่าวข้างต้นซึ่งเป็นΣ 0 1 ตัวอย่างของปัญหาดังกล่าว (โดยที่ϕ nคือฟังก์ชั่นที่คำนวณได้บางส่วนn -th และW n = { k Nϕ n ( k )  ถูกกำหนด }}คือชุดที่สามารถคำนวณได้n -th):0'Σ10φnnWn={kยังไม่มีข้อความ|φn(k) ถูกกำหนดไว้}n

  • คือ Σ 0 2- complete{nยังไม่มีข้อความ|φn สิ้นสุดสำหรับอินพุตจำนวนมากอย่างละเอียด}Σ20
  • คือ Π 0 2- complete{nยังไม่มีข้อความ|φn เป็นฟังก์ชั่นทั้งหมด}Π20
  • คือ Σ 0 3 -complete{nยังไม่มีข้อความ|Wn เป็นชุดที่คำนวณได้}Σ30

สิ่งเหล่านี้ไม่สามารถแก้ไขได้แม้ว่าคุณจะมี Oracle Halting ตัวอย่างเช่นลองพิจารณาตัวอย่างที่สองว่า "คือผลรวม ?" ได้รับnว่าจะลังเลออราเคิลช่วยให้เราตัดสินใจได้ว่าเครื่องทัวริงเข้ารหัสโดยnหยุดในทุกการป้อนข้อมูล?φnnn


[เพิ่ม 2014-06-03]สำหรับแง่มุม "เชิงปฏิบัติ" ทั้งหมดนี้ให้พิจารณาปัญหา: โปรแกรมเมอร์ได้เขียนฟังก์ชั่นvoid charge_credit_card(int card_number, int amount)และเราต้องการทราบว่าฟังก์ชั่นนั้นสิ้นสุดลงในอินพุตทั้งหมดหรือไม่ มันเป็นไปไม่ได้ที่จะเขียนคอมไพเลอร์ซึ่งจะสามารถตรวจสอบนี้โดยทั่วไป ยิ่งกว่านั้นแม้ว่าเราจะอนุญาตให้คอมไพเลอร์ถามเราในแบบฟอร์ม "จะcharge_credit_cardยุติเมื่อป้อนข้อมูล(k,m)หรือไม่" ก็ยังเป็นไปไม่ได้


2
พูดว่า "ฉันไม่เข้าใจตัวอย่าง" โดยไม่อธิบายว่าคุณสับสนอะไรไม่ได้ผล คุณอ่านหน้า Wikipedia ที่เกี่ยวข้องที่ฉันชี้ไปแล้วหรือยัง? สิ่งเหล่านี้เกี่ยวข้องกับคำถามของคุณโดยตรงดังนั้นสิ่งแรกที่คุณควรทำความคุ้นเคยกับแนวคิดพื้นฐานที่เกี่ยวข้อง
Andrej Bauer

1
@ike ตัวอย่างนี้ตั้งใจให้มีจำนวนอนันต์intค่อนข้างชัดเจน คุณต้องการให้ฉันเขียนBigIntหรืออะไรแบบนั้นจริงๆหรือคุณจะบ่นว่าหน่วยความจำคอมพิวเตอร์มี จำกัด หรือไม่?
Andrej Bauer

1
อะไรก็ตาม ฉันบอกคุณว่าคำตอบสำหรับคำถามของคุณคืออะไร หากคุณไม่ต้องการที่จะเข้าใจโดยสุจริตใจอย่ารบกวนเราด้วยคำถาม
Andrej Bauer

2
ตัวอย่างการปฏิบัติคือคำชมเชยการหยุด นี่คือ{ < M , w > : M ไม่ได้หยุดอยู่ที่ w } เนื่องจากมีโปรแกรมที่กำหนดเองและอินพุตให้กับโปรแกรมตรวจสอบว่าโปรแกรมนั้นไม่หยุดทำงานหรือไม่ ปัญหานี้รวมถึงภาษาอื่น ๆ ที่ไม่สามารถเรียกซ้ำได้ทุกภาษาไม่ลดลงเป็น HALT HALT¯{<M,W>:M ไม่หยุดอยู่กับ w}

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