ทำไมปัญหาการหยุดชะงักจึงมีความสำคัญมาก?


149

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

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

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

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


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

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

12
"คุณสามารถใช้อัลกอริทึมที่ตรวจพบว่ามีการเชื่อมโยงรายการเพื่อใช้ฟังก์ชัน Halting พร้อมความซับซ้อนของพื้นที่ O (1)" - แต่ถ้าคุณต้องการแก้ปัญหาสำหรับคอมพิวเตอร์ที่มีพื้นที่เก็บข้อมูล 2 GB คุณจะต้อง 2 ^ 2000000000 ขั้นตอนและคอมพิวเตอร์ที่ใหญ่กว่า
user2357112

11
นานมาแล้วฉันได้พูดคุยกับเพื่อนเกี่ยวกับปัญหาการหยุดชะงักและมีคนที่นั่งอยู่ใกล้ ๆ ถามว่า "ปัญหาการหยุดพักอะไรเป็นสิ่งสำคัญหรือไม่" และเพื่อนของฉันหันไปหาเขาและพูดว่า "ถ้าเราสามารถแก้ปัญหาการหยุดชะงักได้เราสามารถสร้างเมืองบนก้อนเมฆ" นี่เป็นเรื่องจริง
ฟรานซิสดาวี่

8
@emory การอ้างสิทธิ์ไม่มีความจริง: P => Qเป็นจริงสำหรับ Q ใด ๆ หากเรารู้ว่าPเป็นเท็จ (และเรารู้ว่าปัญหาการหยุดชะงักไม่สามารถแก้ไขได้) ฟรานซิสก็พูดได้เช่นกัน "ถ้าเราสามารถแก้ปัญหาการหยุดชะงักได้เราจะหาทางรักษาความตายได้" มันเป็นวิธีการกำหนดความหมายเชิงตรรกะ
amalloy

คำตอบ:


217

เพราะปัญหาในทางปฏิบัติที่เกิดขึ้นจริงจำนวนมากเป็นปัญหาการหยุดชะงักในการปลอมตัว ทางออกสำหรับพวกเขาในการแก้ปัญหาการหยุดชะงัก

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

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

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

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

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

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

  2. คุณต้องการสถานะหากคุณมี RAM n บิต ดังนั้นสำหรับคอมพิวเตอร์ของคุณ 8GB ทันสมัยที่{} นี่เป็นจำนวนที่มากจนวุลแฟรมอัลฟ่าไม่รู้วิธีตีความมัน เมื่อฉันทำมันบอกว่ามันมีทศนิยมหลัก มีขนาดใหญ่มากสำหรับจัดเก็บในคอมพิวเตอร์ปกติ2 32000000000 2 10 9 3000000002n2320000000002109300000000

ปัญหาการหยุดชะงักทำให้เรามีเหตุผลเกี่ยวกับความยากลำบากในการญาติของอัลกอริทึม มันทำให้เรารู้ว่ามีอัลกอริธึมบางอย่างที่ไม่มีอยู่ซึ่งบางครั้งสิ่งที่เราทำได้คือเดาว่าเป็นปัญหาและไม่เคยรู้เลยว่าเราแก้ไขมันแล้วหรือยัง

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

อัปเดต: เพียงเพื่อแก้ไขปัญหาสองสามประการที่เกิดขึ้นในความคิดเห็น

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

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

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

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

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

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

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


4
@ Mehrdad สำหรับคำจำกัดความที่สมเหตุสมผลของ "รหัสเครื่องที่เร็วที่สุดสำหรับโปรแกรมที่กำหนด" คำถามนั้นสมเหตุสมผลและคำตอบก็คือ "ไม่มีคอมไพเลอร์ดังกล่าว"
David Richerby

13
นอกจากนี้ยังใช้สำหรับค้นหารหัสเครื่องที่สั้นที่สุดที่เป็นไปได้ซึ่งเป็นหนึ่งในหน่วยความจำน้อยที่สุดเป็นต้นสำหรับโปรแกรมทั่วไป นี่เป็นทฤษฎีบทของไรซ์
jmite

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

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

7
@ Merhrdad: ตัวอย่างของคุณ "การจำลองโปรแกรมคอมพิวเตอร์ทั้งหมด" เป็นตัวอย่างที่ยอดเยี่ยมว่าทำไมปัญหาการหยุดชะงักจึงมีความสำคัญ สำหรับบางโปรแกรมการจำลองโปรแกรมนั้นไม่ได้ตรงไปตรงมาเหมือนที่ปรากฏ (ตัวอย่างเช่นดูที่หน้าวิกิพีเดียว่าหยุดทำงาน) หากปัญหาสามารถหลอกลวงได้ในแบบฟอร์มนี้คุณสามารถจินตนาการได้ว่าเป็นการยากที่จะอธิบายให้คนอื่นเห็นรูปแบบที่ซ่อนอยู่มากขึ้น (เช่นปัญหาต่อต้านไวรัส)
Cort Ammon

49

ในทางปฏิบัติมันเป็นสิ่งสำคัญเพราะมันช่วยให้คุณสามารถบอกเจ้านายที่ไม่รู้ของคุณ "สิ่งที่คุณถามเป็นไปไม่ได้ทางคณิตศาสตร์"

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

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



16
ดี @bishop ยกเว้นFlickr ทำไม่ได้จริง
Francisco Presencia

8
มันเป็นไปได้ที่จะออกแบบภาษาที่ไม่สมบูรณ์ทัวริง : ตัวอย่างของภาษาที่ไม่ใช่ทัวริงสมบูรณ์ที่มีประโยชน์: SQL (จริง ๆ แล้วเป็น SQL แบบแยกส่วน) ทัวริงสมบูรณ์จะเพิ่มการไม่เลิกกับภาษาโดยอัตโนมัติซึ่งเป็นสิ่งที่คุณอาจไม่ต้องการเมื่อเรียกใช้แบบสอบถาม DB (แม้ว่าฉันเกรงว่าการใช้งาน SQL ที่ทันสมัยทั้งหมดจะมีความสมบูรณ์แบบอยู่แล้ว)
Bakuriu

8
@FranciscoPresencia: พวกเขาใช้ทีมวิจัยดังนั้นประเด็นทั่วไปยังคงอยู่
RemcoGerlich

4
@MooingDuck: สิ่ง Flickr ไม่ได้เลือกระหว่างสวนสาธารณะและนกมัน (พยายาม) ยืนยันอย่างใดอย่างหนึ่งหรือทั้งสอง หรือไม่ใช่แฮคเกอร์
rickster

45

คุณสามารถใช้อัลกอริทึมที่ตรวจพบว่ามีการเชื่อมโยงรายการลูปเพื่อใช้ฟังก์ชัน Halting กับความซับซ้อนของพื้นที่ของ O (1)

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

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

นอกจากนี้คุณไม่สามารถเพียงแค่ใช้วิธีการตรวจสอบห่วงในรายการที่เชื่อมโยง คุณต้องรู้ว่าจะหยุดเมื่อไหร่ คุณสามารถหยุดได้เมื่อคุณดำเนินการหลายขั้นตอนตามที่ระบุในคอมพิวเตอร์ หากโปรแกรมใช้หน่วยความจำสูงสุดบิตแสดงว่าอาจมีสถานะต่างกันเรื่องนี้กลายเป็นไปไม่ได้อย่างรวดเร็วมาก ตัวอย่างเช่นคอมพิวเตอร์ทั่วไปดำเนินการตามคำสั่งเป็นพันล้านคำสั่งต่อวินาที หนึ่งพันล้านวินาทีนั้นน้อยกว่า 30 ปี ดังนั้นถ้าคุณใช้คอมพิวเตอร์เป็นเวลา 8 ปีคุณสามารถทดสอบได้ว่าโปรแกรมใดโปรแกรมหนึ่งที่มีสถานะอาจหยุดชะงักประมาณ 250 ล้านล้านโปรแกรม แต่นั่นเป็นเพียงรัฐกล่าวคือคุณสามารถทดสอบโปรแกรมที่ทำงานในหน่วยความจำ 7 ไบต์เท่านั้น2 M 2 56M2M256

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

ดังนั้นไม่รวมโปรแกรมที่ขัดแย้งกันปัญหา Halting จึงสามารถตัดสินใจได้

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

มีผลทั่วไปมากขึ้นเรียกว่าทฤษฎีบทของไรซ์ซึ่งระบุว่าทรัพย์สินใด ๆ ที่ไม่สำคัญโปรแกรมไม่สามารถระบุได้ - คุณสมบัติใด ๆ ที่ขึ้นอยู่กับลักษณะการทำงานของโปรแกรมเท่านั้นและไม่ใช่ในลักษณะที่เขียน (ตัวอย่างเช่น“ ซอร์สโค้ดประกอบด้วยอักขระน้อยกว่า 42 ตัวหรือไม่) สามารถถอดรหัสได้อย่างชัดเจนในขณะที่“ มี โปรแกรมที่มีซอร์สโค้ดประกอบด้วยอักขระน้อยกว่า 42 ตัวและส่งคืนผลลัพธ์เดียวกันสำหรับอินพุตทั้งหมดหรือไม่” ไม่ใช่และไม่“ โปรแกรมนี้ให้ผลลัพธ์ใด ๆ หรือไม่”) การหยุดเป็นเพียงตัวอย่างหนึ่ง มันเป็นสิ่งสำคัญเพราะมักจะเกิดขึ้นในทางปฏิบัติ (โดยปกติเราต้องการทราบว่าโปรแกรมจะส่งคืนผลลัพธ์ในเวลาที่เหมาะสมหรือไม่เนื่องจากทรัพยากรที่ จำกัด ของคอมพิวเตอร์ที่ใช้งานอยู่ แต่เนื่องจากนี่เป็นคำตอบที่ไม่ค่อยจริง ยินดีที่จะชำระสำหรับคำถามที่ง่ายขึ้นว่าในที่สุดโปรแกรมจะยุติการให้เวลาและหน่วยความจำที่เพียงพอหรือไม่)


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

@supercat ใช่คุณสมบัตินี้สามารถถอดรหัสได้ มันไม่สามารถตัดสินใจได้สำหรับกรณีทั่วไปของโปรแกรมที่รับอินพุต
Gilles

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

3
@supercat ไม่ออราเคิลหยุดเพื่อป้อนข้อมูลทั้งหมดจะเป็นหนึ่งในขั้นตอนต่อไปที่สูงกว่าออราเคิลหยุดพักสำหรับการป้อนข้อมูลที่กำหนด ที่จะทำให้เป็นคำถามที่ดีสำหรับเว็บไซต์นี้ ... ในความเป็นจริงเรามีมัน โดยวิธีการแบบจำลองจิตเริ่มต้นของฉันคือฟังก์ชั่นวนซ้ำโดยที่ "การป้อนข้อมูล" หมายถึง "การโต้แย้ง" และการเรียกใช้โปรแกรมหมายถึงการใช้มันกับการโต้แย้ง คุณพูดถูกที่งบของฉันเป็นเท็จในบริบทที่เกี่ยวกับเครื่องจักรทัวริงฉันจะอัปเดต
Gilles

28

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

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

ตัวอย่างที่คล้ายกัน (อาจจะเป็นนามธรรมน้อยกว่า) คือฟังก์ชั่น "busy beaver"ซึ่งถูกกำหนดโดยสัญชาตญาณเป็นลำดับที่ยาวที่สุดของ 1 ของ turing machine ที่มี state เริ่มด้วยเทปเปล่าสามารถเขียนได้ก่อนที่จะยุติ สำหรับใด ๆมีเพียงจำนวน จำกัด ของเครื่องจักรทัวริงและแต่ละเครื่องจะสิ้นสุดในบางจุด (จากนั้นคุณสามารถนับจำนวนของพวกเขา) หรือมันจะทำงานตลอดไป (จากนั้นบีเวอร์ยุ่งไม่สนใจเกี่ยวกับมัน - มัน ดูเฉพาะโปรแกรมที่ยกเลิก) ดังนั้นการทำงานของช่องคลอดไม่ว่างมีค่ากำหนดขึ้นสำหรับทุกn(เรารู้ด้วยซ้ำว่าเล็กน้อยn n n n n Σ ( n )Σ(n):=nnnnเพราะเราสามารถดูแต่ละโปรแกรมและหาหลักฐานพิสูจน์ว่าทำไมพวกเขาจะไม่หยุด.) แต่มีไม่สามารถเป็นโปรแกรมที่คำนวณ(n)Σ(n)


2
เป็นที่น่าสังเกตว่าในรูปแบบทั่วไป Paradox ของ Liar นั้นให้การอ้างอิงที่ชัดเจนกับตัวเอง แต่ปัญหาเดียวกันอาจเกิดขึ้นได้แม้ว่าจะไม่ได้ คำตอบของคำสั่งนั้นเกิดจากการนำข้อความมาใช้หรือไม่ "คำตอบของคำแถลงนั้นเกิดจากการรับข้อความและแทรกหลังจากที่คอมม่าแรกคัดลอกที่อยู่ในเครื่องหมายคำพูดไม่ใช่หรือ" และแทรกหลังจากเครื่องหมายจุลภาคแรกคัดลอกอยู่ในเครื่องหมายคำพูดเดี่ยวไม่ใช่? คำสั่งดังกล่าวไม่ได้อ้างอิงตนเองอย่างชัดเจน แต่หมายถึงความจริงของคำสั่งซึ่งเป็นตัวละครสำหรับตัวละครที่เหมือนกัน
supercat

2
@supercat: ฮะผมไม่คิดว่าผมเคยเห็นควินในภาษาอังกฤษมาก่อน ...
SAMB

@ แซม: ฉันเคยเห็นมาบ้าง แต่ตัดสินใจลองใช้สูตรดั้งเดิมซึ่งในขณะที่ verbose มากกว่าบางคนอ่าน (อาจ) โดยธรรมชาติมากกว่า
supercat

24

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

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

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

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

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

การพิสูจน์ของทัวริงเกี่ยวกับความลังเลของปัญหาการหยุดชะงักใช้กลอุบายที่คล้ายกับ Liar Paradox ใช่ บุคคลที่ผิดธรรมดามักจะถูกกำหนดให้เป็นความขัดแย้งที่เห็นได้ชัดและบางคนอนุมานจากที่ความขัดแย้งจึงไม่ขัดแย้งจริง อย่างไรก็ตามความขัดแย้งของรัสเซล (ชุดที่เป็นทางการ - ทฤษฎีคู่กับความขัดแย้งของคนโกหก) แสดงให้เห็นความขัดแย้งที่แท้จริงในวิชาคณิตศาสตร์และการพิสูจน์ undecidability ของปัญหาที่หยุดชะงักใช้ความขัดแย้งที่แท้จริงสำหรับการพิสูจน์โดยความขัดแย้ง


1
+1 สำหรับการอธิบายความสัมพันธ์ระหว่างคอมพิวเตอร์จริงเครื่องจักรสถานะ จำกัด และเครื่องจักรทัวริงซึ่งเป็นส่วนสำคัญของการตั้งค่าคำถาม
David Richerby

1
คุณทำให้ฉันสนใจ ความแตกต่างระหว่างความขัดแย้งที่ชัดเจนและความขัดแย้งที่แท้จริงคืออะไร?
เบรนต์

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

3
@Brent ความขัดแย้งจำนวนมากไม่ได้ขัดแย้งเลย แต่เฉพาะในครั้งแรกที่เห็น เมื่อเราดูใกล้ ๆ จะมีข้อผิดพลาดในการให้เหตุผลหรือคำบางคำที่ความหมายเปลี่ยนไปเล็กน้อยโดยใช้มันในบริบทที่แตกต่างหรือสิ่งที่คล้ายกัน อย่างไรก็ตามบางครั้งความขัดแย้งทำให้เกิดความขัดแย้งที่แท้จริง
Hoopje

ฉันได้รับการศึกษาปัญหานี้ในและนอกตั้งแต่ OP ของฉัน ทฤษฎีความไม่สมบูรณ์ของGödelบอกเป็นนัยว่าเป็นไปได้เสมอที่จะเกิดความขัดแย้งขึ้นโดยไม่คำนึงถึงระบบของการใช้ตรรกะ?
เบรนต์

17

jmite ตอบคำถามอย่างดีมาก ให้ฉันเพิ่มหมายเหตุด้านเล็กน้อยเกี่ยวกับความคล้ายคลึงกันที่รับรู้กับ "Liar's Paradox" ซึ่งฉันคิดว่าเกิดจากการใช้กลไกอ้างอิงตนเอง

การอ้างอิงตนเองไม่ได้ขัดแย้งกัน!

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

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


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

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

s2s


14

ปัญหาการหยุดพักแนะนำแนวคิดทางคณิตศาสตร์ใหม่ของ "undecidability" ที่ไม่เคยมีอยู่ในคณิตศาสตร์ มันเป็น ("ดูเหมือนขัดแย้ง") พิสูจน์ว่าปัญหาบางอย่างไม่มี "พิสูจน์" มันเชื่อมต่อกับแนวคิด Godelian ของการพิสูจน์ไม่ได้ ทฤษฎีบท Godelsนำหน้าปัญหาการหยุดชะงักโดยทัวริงเมื่อไม่กี่ปีที่ผ่านมา ผล Godels ถือว่าค่อนข้างเป็นนามธรรมในเวลานั้นและเป็นที่รู้จักกันเฉพาะกับนักวิจัยและผู้เชี่ยวชาญ สูตร Turings แสดงให้เห็นว่าหลักการของ undecidability ถูกที่เกี่ยวข้องกับการปฏิบัติสูง / ปฏิบัติ / ใช้คำถามในสาขาวิทยาศาสตร์คอมพิวเตอร์เช่นการกำหนดว่าโปรแกรมโดยพลการหยุดและมันก็ถือได้ว่าเป็นแนวคิดทฤษฎีไกลน้อยก็แสดงให้เห็นถึงความท้าทายที่ทันสมัยเช่น" (ความท้าทายว่าคอมพิวเตอร์สามารถค้นพบทฤษฎีบท) และพิสูจน์การยุติโปรแกรม

อีกมุมที่น่าสนใจคือมีปัญหาบางอย่างในทฤษฎีจำนวน (ไดโอแฟนไทน์) ที่มีต้นกำเนิดมาจากชาวกรีกที่ไม่สามารถพิสูจน์ได้ว่าเป็นพันปี มีผลลัพธ์ที่เกี่ยวข้องว่าคำถามทั่วไปเกี่ยวกับสมการไดโอแฟนไทน์จะไม่สามารถบอกได้ว่าเป็นปัญหาหรือทฤษฎีบทของฮิลเบอร์ต Hilbert อยู่ที่เปลี่ยนศตวรรษที่ 20 และเสนอเป็นโปรแกรมวิจัยที่คณิตศาสตร์สามารถหาแนวทางที่เป็นระบบในการแก้ไขปัญหาคณิตศาสตร์. ความท้าทาย / แผนนี้เกิดขึ้นอย่างจริงจังจากการค้นพบความไม่แน่นอนในอีกไม่กี่ทศวรรษต่อมา undecidibility ยังคงเป็นพื้นที่ของการวิจัยขั้นสูงมากและขอบเขตระหว่างปัญหา undecidable และ decidable อาจจะอยู่ภายใต้การศึกษาเพิ่มเติมและการวิเคราะห์


14

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

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

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

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

ให้ S เป็นสมบัติที่ไม่สำคัญของ1ที่เครื่องทัวริงยอมรับ นั่นหมายความว่ามีเครื่องทัวริงอย่างน้อยหนึ่งเครื่องที่รับอินพุตด้วยคุณสมบัติ S และอีกอันที่ไม่มี

จากนั้นมันจะไม่สามารถตัดสินใจได้ถ้าเครื่องทัวริง T รับอินพุตด้วยคุณสมบัติ S

คุณต้องการที่จะรู้ว่าทัวริงเครื่องยอมรับแม้แต่จำนวนเต็ม? undecidable

คุณต้องการที่จะรู้ว่าทัวริงเครื่องยอมรับการยอมรับลำดับเลขคณิตหรือไม่? undecidable

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


1โดยproperty ofไม่รวมถึงกลไกในการยอมรับ - เพียงแค่สิ่งที่ได้รับการยอมรับ "มันยอมรับใน 100 หรือน้อยกว่าขั้นตอน" เป็นคุณสมบัติที่จะยอมรับไม่ใช่สิ่งที่ได้รับการยอมรับ


คุณอาจต้องการอธิบายว่า "คุณสมบัติ" คืออะไรเนื่องจากการตีความที่ไร้เดียงสาอาจทำให้ไม่ถูกต้อง
Rick Decker

@rick ฉันคิดว่าเชิงอรรถครอบคลุมตอนนี้หรือไม่
Yakk

7

คุณถูกต้องว่าปัญหาการหยุดพักชั่วคราวที่ได้รับการแนะนำและกล่าวถึงนั้นเป็นเพียงแค่ gotcha มันไม่ได้พิสูจน์ว่าไม่มีค่าสามอย่าง ('halts', 'loops', 'ไม่รู้') halt-function ที่ในทางปฏิบัติจะคืนค่า 'halts' หรือ 'loops' และจะคืนค่า 'don' เท่านั้น ไม่ทราบ 'สำหรับกรณีมุมที่สร้างขึ้นเป็นพิเศษเช่น

สองสาเหตุที่ทำให้ปัญหาการหยุดชะงักมีความสำคัญ:

1) นี่เป็นหนึ่งในปัญหาที่ไม่อาจพิสูจน์ได้อย่างแรก แม้ว่าสมมุติว่ามีเพียงคนเดียวที่ 'ไม่รู้' แต่ก็ยังคงมีความสนใจทางคณิตศาสตร์อย่างมาก

2) ปัญหาบางอย่างลดลงจนถึงปัญหาการหยุดชะงักที่ผู้โจมตีประสงค์ร้ายสามารถระบุเคสที่จะวิเคราะห์ สิ่งนี้ทำให้เราต้องยอมรับว่าอาจมีกรณีที่ถูกต้องที่เรายังต้องปฏิเสธ

หลังจากนั้นมาถึงจุดที่สองการวิเคราะห์ซอฟต์แวร์เป็นปัญหาที่ยากลำบากแม้ว่าจะมีการพัฒนาทั้งในด้านการวิเคราะห์และการออกแบบภาษาเพื่อให้การวิเคราะห์ง่ายขึ้น หากคุณสามารถแสดงให้เห็นว่างานบางอย่างคล้ายกับการวิเคราะห์ซอฟต์แวร์ใช่มันยากที่จะมีเงินทุน H. 'มันเป็นไปไม่ได้เพราะมันจะเป็นจำนวนเงินที่จะแก้ปัญหาการหยุดพัก' แม้ว่าจะผิดทางเทคนิคหรือไม่เกี่ยวข้องในหลายกรณี จดชวเลขสำหรับการสังเกตนี้


5

มีการโต้แย้งที่แตกออกมาโดย Eric Hehner ในชุดของเอกสารที่ยืนยันว่าแก้ไม่ได้ของปัญหา Halting เป็นเรื่องเข้าใจผิดโดยทั่วไป เอกสาร "Epimenides, Gödelทัวริง: นิรันดร์โกลเด้นยุ่งเหยิง", "มีปัญหากับลังเลปัญหา", "การฟื้นฟูลังเลปัญหา" และ "ลังเลปัญหา" สามารถพบได้ที่นี่ เพื่อให้คำตอบนี้ไม่ใช่ "ลิงก์เท่านั้น" ฉันจะพยายามสรุปข้อสรุปข้อใดข้อหนึ่งของเขา แต่ไม่ใช่ข้อโต้แย้ง

f(0)=1f(0)=2hh(M)MHhh


3
ฉันไม่ทำตาม ฟังก์ชั่นหยุดพักเป็นภาคแสดงที่กำหนดไว้อย่างสมบูรณ์และถูกต้อง - สำหรับเครื่องทัวริงและอินพุตที่กำหนดใด ๆ เครื่องหยุดหรือลูป (คุณขาดการอ้างอิงที่เหมาะสมคุณสรุปว่าปาปาร์คนใด)
ราฟาเอล

@ ราฟาเอลฟังก์ชั่นที่มีการกำหนดชัดเจนเป็นที่ยอมรับกันโดยทั่วไปว่าเป็นความจริง มุมมองของ Hehner แตกต่างและอธิบายไว้ในเอกสารของเขา ฉันจะแก้ไขคำตอบของฉันเพื่อให้ชื่อของเอกสาร
Theodore Norvell

สมมติว่าสิ่งที่โต้แย้งของ Hehner คือ [ฉันไม่ได้อ่านเอกสาร] พวกเขาโต้เถียงอย่างน้อยในการอ่าน / การประมาณครั้งแรก: ' cs.toronto.edu/~hehner/Shallitaffair.pdfและrecursed.blogspot.com/ 2013/10 / eric-hehner-replies.html
Fizz

และยังไม่ชัดเจนเนื่องจากธรรมชาติและจำนวนการอ้างอิงที่เอกสารของ Hehner (เกี่ยวกับเรื่องนี้) ทำให้การอ่านเพิ่มเติมใด ๆ (ผลงานของเขาเกี่ยวกับเรื่องนี้) มีความยุ่งยาก
Fizz

หลักฐานของเขาดูแข็งแกร่งมากและชี้ให้เห็นว่ามันเป็นเพียงการทำสิ่งที่โง่เขลาที่คุณสามารถทำได้ในปรัชญาเช่นพยายามวิเคราะห์ข้อความอ้างอิงตัวตนต่อไปนี้สำหรับความจริง: "ประโยคนี้เป็นเท็จ" ซึ่งถ้าความจริงหมายความว่ามันเป็นความจริงซึ่งหมายความว่ามันเป็นความจริงจริง ๆ แล้วมันไม่เป็นความจริงอีกต่อไป ... ดังนั้นนี่จึงดูเหมือนคำถามทางปรัชญาการมองเรือที่ไม่สำคัญนัก en.wikipedia.org/wiki/Liar_paradoxความขัดแย้งที่หยุดนิ่งอาจเป็นกรณีของนักวิทยาศาสตร์ที่ไม่ได้พูดคุยกับนักปรัชญา
James Wakefield

3

ฉันขอเสนอคำอธิบายที่แตกต่างกันเกี่ยวกับความสำคัญของปัญหาการหยุดชะงักที่เกี่ยวข้องกับผู้คนมากกว่าเครื่องจักร

มันเป็นการบรรยายครั้งสุดท้ายของหลักสูตรโครงสร้างและการตีความของMIT 1986 ศาสตราจารย์ถาม"มีคำถามอะไรไหม?" และเตรียมที่จะจบการบรรยายเมื่อนักเรียนคนหนึ่งถาม: "นี่เป็นคำถามสุดท้ายหรือไม่"

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

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

PS: ถ้าคุณไม่รู้ว่าหลักสูตรที่ฉันกำลังพูดไปให้ไปดูมันช่างน่ากลัว


แต่ถ้าฉันจะดำเนินdoesHalt(programCode, input);การโปรแกรมไม่สามารถรู้ว่าสิ่งที่doesHaltฟังก์ชั่นกลับมา เป็นไปไม่ได้ที่โปรแกรมจะยกเลิกการหยุดหลังจากdoesHaltฟังก์ชั่นประเมินผลแล้ว
Tvde1

0

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

เป็นไปได้มากที่การคาดเดานี้อาจพิสูจน์ไม่ได้ว่าในกรณีนี้เรามีโปรแกรมที่ตรงไปตรงมาที่โปรแกรมหยุดทำงานล้มเหลว


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