กำลังหยุดปัญหาที่คำนวณได้สำหรับอินพุต / สมมติฐานเฉพาะ


19

จากความเข้าใจของฉันเกี่ยวกับการพิสูจน์ว่าปัญหาการหยุดชะงักไม่สามารถคำนวณได้ปัญหานี้ไม่สามารถคำนวณได้เพราะถ้าเรามีโปรแกรม P (x) ซึ่งคำนวณว่าโปรแกรม x หยุดทำงานหรือไม่เราได้รับความขัดแย้งเมื่อให้ P เป็นอินพุตกับ P เดียวกันมี: P (P) พยายามตัดสินใจว่า P หยุดหรือไม่ใช้ P เอง

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


ฉันคิดว่าคุณเข้าใจผิดในการพิสูจน์ว่าปัญหาการหยุดทำงานไม่สามารถคำนวณได้ P (P) จะคืนค่า true เนื่องจาก P กำหนดเสมอว่าโปรแกรมหยุดทำงานในเวลา จำกัด คุณต้องทำการก่อสร้างที่ยากขึ้นเล็กน้อยเพื่อให้ได้ความขัดแย้ง
Dan Staley

ฉันคิดว่าคุณน่าจะได้คำตอบที่ดีขึ้นและอาจมีความเกี่ยวข้องมากกว่านี้หากคุณถามว่ามีโปรแกรมมากมายที่แก้ปัญหาการหยุดชะงักหรือไม่ ท้ายที่สุดแล้วหลาย ๆ โปรแกรมสามารถตรวจสอบได้อย่างเป็นทางการซึ่งรวมถึงการพิจารณาว่าพวกเขาหยุดด้วยอินพุตที่กำหนดหรือไม่ ฉันคิดว่ากลุ่มนั้นไม่สามารถตัดสินใจได้ (เพราะนั่นจะเป็นการแก้ปัญหา ... คุณรู้) แต่สำหรับโปรแกรมในโลกแห่งความเป็นจริงส่วนใหญ่ไม่มีอุปสรรคที่จะบอกได้ว่าพวกเขาจะหยุดหรือไม่สำหรับปัจจัยที่เกี่ยวข้อง
Peter - Reinstate Monica

คำตอบ:


10

ถ้าเป็นฟังก์ชันที่คำนวณได้ใด ๆ ดังนั้นหมายถึงfg

g(n)={f(n)if nkvotherwise

นอกจากนี้ยังคำนวณสำหรับทางเลือกของโวลต์k,v

โดยทั่วไปหากคุณมีโปรแกรมซึ่งคำนวณสำหรับทั้งหมดยกเว้นคุณสามารถ "แก้ไข" กรณีนั้น (เช่นใช้) และรับโปรแกรมที่คำนวณสำหรับ ทั้งหมดnPg(n)nn=kif then elsePg(n)n

ดังนั้นหากคุณสามารถคำนวณฟังก์ชั่นการหยุด "ยกเว้นกรณีหนึ่ง" คุณสามารถคำนวณฟังก์ชั่นการหยุดพัก (ไม่มีข้อยกเว้น) จากนั้นคุณสามารถได้รับความขัดแย้งตามปกติ

สรุป: ไม่คุณไม่สามารถตัดสินใจปัญหาการหยุด "ยกเว้นหนึ่งกรณี" (หรือ "ยกเว้นหลายกรณีที่มีขอบเขต")


1
ตกลงฉันคิดว่าฉันได้รับมันทางคณิตศาสตร์ ... แต่ฉันสงสัยว่า: ถ้าฉันจะพยายามเขียนโปรแกรมที่คำนวณ HP ปัญหาที่เป็นรูปธรรมที่ฉันจะต้องเผชิญ? ทำไมบางครั้งฉันถึงเข้าใจว่าฉันไม่สามารถเขียนโปรแกรมดังกล่าวได้?
Alessio Martorana

@AlessioMartorana มันขึ้นอยู่กับ: คุณจะแก้ไขปัญหานี้อย่างไร? ปัญหาหลักคือต้องหยุดเสมอแม้เมื่ออินพุตเป็นโปรแกรมที่ไม่หยุด - ดังนั้นคุณจึงไม่สามารถลองจำลองโปรแกรมอินพุตได้ P
Chi

และสมมติว่าเราสามารถเห็นรหัสของโปรแกรมอินพุตได้หรือไม่ เราไม่สามารถดูรหัสจากโปรแกรมได้หรือไม่
Alessio Martorana

2
@AlessioMartorana เราสามารถเห็นรหัสได้แน่นอน แต่ถ้ามีวงในขณะที่เราไม่สามารถพูดอะไรได้มากมาย ห่วงในขณะที่อาจตรวจสอบการพิสูจน์ที่เป็นไปได้ทั้งหมดของการคาดเดาทางคณิตศาสตร์โดยพลการและหยุดเฉพาะในกรณีที่พบหลักฐาน การตัดสินใจว่าลูปหยุดชั่วคราวนี้หมายถึงการตัดสินใจว่าการคาดเดานั้นพิสูจน์ได้หรือไม่ การแก้ปัญหา HP จะให้เครื่องจักรที่จะตอบว่าใช่ (พิสูจน์ได้) / ไม่ใช่ (ไม่สามารถพิสูจน์ได้) สำหรับคำถามทางคณิตศาสตร์อย่างเป็นทางการ นั่นจะเป็นพลังที่ไม่สมจริง
Chi

1
@AlessioMartorana ถ้าคุณคิดว่าคุณเขียนโปรแกรมที่แก้ปัญหา HP ซึ่งโปรแกรมของคุณอาจล้มเหลวคือหนึ่งในสองวิธี: สำหรับบางโปรแกรมอาจส่งคืนผลลัพธ์ที่ไม่ถูกต้อง ไม่หยุดเมื่อไหร่) และ / หรือโปรแกรม decider ของคุณเองจะไม่หยุดกับอินพุตหลายตัวโดยที่คุณไม่สามารถรู้ได้ว่ามันจะหยุดจริงๆหรือถ้ามันต้องใช้เวลามากขึ้นในการคำนวณคำตอบ
Shufflepants

21

ปัญหาการหยุดทำงานที่คำนวณโดยโปรแกรม P สำหรับโปรแกรมอื่น ๆ ทั้งหมดที่ใช้เป็นอินพุต แต่ตัว P เอง

ไม่พิจารณาลำดับที่ไม่สิ้นสุดของโปรแกรมโดยที่คือ "ย้ายหัว  กำลังสองไปทางขวาจากนั้น  กำลังสองทางซ้ายแล้วทำสิ่งที่จะทำ" โปรแกรมเหล่านี้ทุกโปรแกรมสร้างเอาต์พุตเหมือนกับ สำหรับทุกอินพุต (รวมถึงวนซ้ำตลอดไปถ้าวนซ้ำตลอด ไป) แต่เป็นโปรแกรมที่แตกต่างกันทั้งหมดP1,P2,PiiiPPP

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


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

3
@wen เมื่อข้อ จำกัด ตัวเองไม่สามารถตัดสินใจได้คุณไม่สามารถกำหนดข้อ จำกัด ได้ดังนั้นจึงไม่สามารถซื้ออะไรในความเป็นจริง
David Richerby

5

มีอัลกอริธึมที่จะแสดงว่าบางคลาสของโปรแกรมทำหรือไม่หยุด ตัวอย่างเช่น,

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

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


สิ่งนี้เกี่ยวข้องกับโกโตะ? เราไม่สามารถมีโปรแกรมที่ใช้ goto และยังคงตัดสินใจว่าจะหยุดหรือไม่ตราบใดที่มันเป็นเครื่องสถานะ จำกัด ?
Bergi

ฉันกำลังจะเขียนเกี่ยวกับการหยุดในแง่ของลูป - และจากนั้นก็เปลี่ยนเป็นเพียงเพื่อพูดคุยเกี่ยวกับเครื่องจักรสถานะ จำกัด และสิ่งที่ไม่
Antonio Perez

4

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


3

การพิสูจน์นั้นเป็นเรื่องทั่วไปมากขึ้น: ปัญหาการหยุดชะงักเป็นกรณีพิเศษของทฤษฎีบทข้าวซึ่งระบุไว้

ถ้าเป็นคุณสมบัติของโปรแกรมที่ไม่ขึ้นกับการเป็นตัวแทนมันเป็นจริงเสมอเท็จเสมอหรือไม่สามารถตัดสินใจได้Φ

ที่ "เป็นอิสระจากการเป็นตัวแทน" หมายถึงว่าถ้าและBเป็นโปรแกรมที่มีพฤติกรรมเหมือนกันสำหรับปัจจัยการผลิตทั้งหมดแล้วΦ ( )ถือ IFF Φ ( B )ถือABΦ(A)Φ(B)

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

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

NkBB(k)


1
N

1
ย่อหน้าสุดท้ายคล้ายกับ Busy Beaver
Evil

เกี่ยวกับข้อ จำกัด "ค่อนข้างรุนแรง": ภาษาการเขียนโปรแกรมทั้งหมดเป็นสิ่ง พวกเขามักจะต้องการความซับซ้อนในระดับสูงดังนั้นบางทีคุณอาจคิดว่ารุนแรง แต่ก็เป็นไปได้ที่จะแก้ปัญหาที่แท้จริงในพื้นที่ของโปรแกรมที่หยุดยั้ง
Ben Millwood

การรวมลิงก์ไปยังen.wikipedia.org/wiki/Rice%27s_theoremน่าจะสมเหตุสมผล IMO
Dmitry Grigoryev

ขอบคุณฉันได้อัพเดตคำตอบแล้ว @BenMillwood แน่นอน แต่เมื่อวิธีการแก้ปัญหาของพวกเขาคือ "หยุดทุกอย่าง" ฉันไม่แน่ใจว่ามันคือสิ่งที่ Alessio กำลังมองหา กรณีที่พฤติกรรมการหยุดชะงักสามารถตัดสินใจได้ แต่ไม่น่าสนใจ แต่น่าสนใจ: อาจเป็นประเภท Agda + แบบเหรียญ?
Anton Golov

0

ให้ R เป็นชุดที่นับซ้ำ แต่ไม่สามารถเรียกซ้ำได้ มีฉากดังกล่าวมากมาย ปล่อยให้ T เป็นเครื่องจักรทัวริงที่หยุดอยู่กับอินพุต k ถ้า k มีค่าใน R ถ้าเช่นนั้น T จะมีอยู่สำหรับชุดนับจำนวนที่เรียกซ้ำได้ มันเป็นไปไม่ได้ที่จะเขียนโปรแกรมที่สามารถแก้ปัญหาการหยุดชะงักของ T นี้นี่เป็นเพราะอัลกอริทึมใด ๆ ที่จะตรวจสอบว่า T halts จะให้อัลกอริทึมสำหรับการพิจารณาสมาชิกใน R ซึ่งเป็นไปไม่ได้ถ้า R เนื่องจากมีจำนวน R มากเช่นนี้แต่ละเครื่องให้ทัวริงที่แตกต่างกันมีเครื่องทัวริงจำนวนมากที่โปรแกรมหยุดทำงาน P ที่พยายามจะล้มเหลว

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