อะไรคือตัวอย่างที่ง่ายที่สุดของโปรแกรมที่เราไม่ทราบว่ามันสิ้นสุดหรือไม่


27

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


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


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

1
@ Rob นั่นไม่จริงจริง หากคุณไม่รู้ว่าจะหยุดเครื่องจักรหรือไม่คุณสามารถรออย่างไม่มีกำหนดเพื่อดูว่าหยุดหรือไม่ หลังจากสหัสวรรษคุณยังไม่รู้ว่ามันจะหยุดพูดในวันถัดไป
Kyle Strand

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

คำตอบ:


41

ตัวอย่างง่ายๆน่าจะเป็นโปรแกรมที่ทดสอบการคาดคะเนของ Collatz :

f(n)={HALT,if n is 1f(n/2),if n is evenf(3n+1),if n is odd

มันเป็นที่รู้จักกันต้องหยุดชะงักสำหรับnขึ้นไปอย่างน้อย5×2605.764×1018แต่โดยทั่วไปก็เป็นปัญหาเปิด


9
เพื่อเน้นจุดของฉันจากความคิดเห็นภายใต้คำถาม: ปัญหา " หยุดสำหรับnทั้งหมดหรือไม่" คำนวณได้ f(n)n
กราฟิลส์

6
@KyleStrand ดูที่นี่
Raphael

10
@ KyleStrand ราฟาเอลถูกต้อง 100% นี่คือความเข้าใจผิดที่พบบ่อย คุณต้องติดตามสิ่งที่คำจำกัดความพูดอย่างระมัดระวังและจากนั้นคุณอาจค้นพบว่าสัญชาตญาณของคุณไม่ตรงกับคำนิยาม ตามคำนิยามของความสามารถในการคำนวณมันพอเพียงแล้วที่มีเครื่องทัวริงในการคำนวณมันไม่สำคัญว่าเรารู้ว่าเครื่องทัวริงคืออะไร เมื่อแรกเห็นนักเรียนหลายคนคิดว่ามันโกง แต่ไม่ใช่ - นั่นเป็นเพียงผลสืบเนื่องจากนิยาม
DW

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

2
@ KyleStrand Afaik ฉันใช้คำจำกัดความมาตรฐานของความสามารถในการคำนวณตามที่สอนวันนี้ (และ afaik มานานหลายสิบปี) ฉันขอแนะนำให้คุณดูดซับคำตอบและวัสดุที่เชื่อมโยงและทำงานในที่ที่คุณผิดพลาด มันไม่สมเหตุสมผลสำหรับฉันและคนอื่น ๆ ที่จะทำสิ่งเดียวกันซ้ำไปซ้ำมา ลองอีกครั้ง: คำจำกัดความของความสามารถในการคำนวณนั้นมีอยู่จริงโดยกำเนิดไม่ใช่เชิงสร้างสรรค์ ตราบใดที่คุณคิดว่าภายในขอบเขตของตรรกะคลาสสิกไม่จำเป็นที่ทุกคนจะสามารถส่งมอบอัลกอริทึม "การแก้ปัญหา" - เราแค่ต้องแสดงให้เห็นว่ามีคำตอบที่ถูกต้อง
ราฟาเอล

31

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

"เรา" ไม่ได้อัลกอริทึม =) ไม่มีคือทั่วไปขั้นตอนวิธีการที่สามารถตรวจสอบว่าได้รับหยุดโปรแกรมสำหรับทุกโปรแกรม

ตัวอย่างที่รู้จักกันง่ายที่สุด (เล็กที่สุด) ของโปรแกรมดังกล่าวคืออะไร

พิจารณาโปรแกรมต่อไปนี้:

n = 3
while true:
    if is_perfect(n):
            halt()
    n = n + 2

ฟังก์ชัน is_perfect ตรวจสอบว่า n เป็นตัวเลขที่สมบูรณ์หรือไม่ ไม่ทราบว่ามีจำนวนที่สมบูรณ์แบบแปลก ๆ ดังนั้นเราไม่ทราบว่าโปรแกรมนี้หยุดทำงานหรือไม่


7
เราเป็นอัลกอริทึม
PyRulez

3
@PyRulez ไม่มีข้อพิสูจน์ว่าพลังการคำนวณของจิตใจมนุษย์เทียบเท่ากับทัวริง หลักฐานไม่ทำงานเช่นไม่ทราบวิธีการจำลองจิตใจหนึ่ง ๆ ในใจอีกข้างหนึ่ง
avsmal

1
@avsmal เอาล่ะ แต่ก็ไม่น่าเป็นไปได้อย่างยิ่งที่เราจะสามารถใช้ไฮเปอร์คอมพิวเตอร์ได้
PyRulez

2
@PyRulez John Lucas และ Roger Penrose ได้แนะนำว่าจิตใจมนุษย์อาจเป็นผลมาจากการคำนวณควอนตัมแบบกลไกบางอย่าง "ไม่ใช่อัลกอริธึม" นั่นคือสมมติฐานที่คาดเดายาก แต่อย่างน้อยจิตใจของเราอาจมีความไม่แน่นอนอยู่บ้าง และนั่นก็เพียงพอที่จะทำลายการพิสูจน์: มันเป็นไปไม่ได้ที่จะลบล้าง "การสุ่ม" (สำหรับคำนิยามที่เหมาะสมของความหมายของการสุ่ม) เครื่องทัวริงหากไม่ทราบว่ามันหยุดหรือไม่
avsmal

5
การคำนวณควอนตัมถือเป็นไฮเปอร์คอมพิวเตอร์หรือไม่ ฉันคิดว่าคอมพิวเตอร์ควอนตัมสามารถจำลองได้อย่างสมบูรณ์แบบโดยเครื่องทัวริง - ช้าลงเล็กน้อย
MaiaVictor

10

ที่คุณเขียน:

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

นี่คือไม่ใช่ sequitur ทั้งสองทิศทาง คุณยอมจำนนต่อการเข้าใจผิดทั่วไปที่มีค่าที่อยู่

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

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

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

การอ่านที่เกี่ยวข้องเพิ่มเติม:


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

อะไรคือตัวอย่างที่รู้จักกันง่ายที่สุด (เล็กที่สุด) ของ [โปรแกรมที่เราไม่รู้ว่าจะหยุดหรือวนซ้ำ]?

S

ก.(n)={1,S จริง,ก.(n+1),อื่น.

จริงอยู่ที่สิ่งเหล่านี้ไม่ใช่ "ธรรมชาติ"


  1. ไม่จำเป็นต้องทั้งหมดแต่ "มาก" ในบางกรณี อย่างน้อยหลายอย่างไม่สิ้นสุด

ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
กราฟิลส์

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

@AsadSaeeduddin มัน "เลว": สำหรับชุด จำกัด ทุกที่กำหนดของโปรแกรมลังเลปัญหาเป็นที่น่ารำคาญ ทุกเซต จำกัด สามารถนำมาคำนวณได้
ราฟาเอล

7

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

    n:=1;
    found:=false;
    while not found do
      s:={};
      i:=n;
      while i not in s do
        add i to s;
        if i even then i:=i/2 else i:=3i+1
      if 1 not in s then found:=true;
      n:=n+1  

6

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


0

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

อินพุต: n . เอาท์พุท: Y / N มีอยู่อย่างน้อยnช่วงเวลาคู่

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

อีกตัวอย่างใช้สมมติฐานของ Riemannและพิจารณาภาษานี้:

อินพุต: n . เอาต์พุต: Y / N มีอยู่อย่างน้อยn nessrivial zeroes ของฟังก์ชัน Riemann zeta

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

ทีนี้ตัวอย่างที่น่าประทับใจยิ่งกว่านี้เป็นอย่างไร? ( ข้อแม้อาจขัดแย้งกันมากขึ้นเช่นกัน)

อินพุต: c: เอาต์พุต: Y / N มีอัลกอริทึมO (n c ) สำหรับ SAT

ในทำนองเดียวกันความละเอียดของ decidability ของภาษานี้เป็นเกือบเทียบเท่ากับP VS ปัญหา อย่างไรก็ตามมีกรณีที่ชัดเจนน้อยกว่าสำหรับรหัส "ง่าย" สำหรับปัญหาในกรณีนี้


1
ผู้ลงคะแนนเสียงจะอธิบายสิ่งที่ผิดกับคำตอบนี้หรือไม่?
MaiaVictor

2
ภาษา "twin prime" ของคุณนั้นสามารถตัดสินใจได้ หากมีเพียงจำนวน จำกัดยังไม่มีข้อความ ของพวกเขาคำตอบคือ "ใช่" สำหรับ nยังไม่มีข้อความและ "ไม่" มิฉะนั้นจะเป็น "ใช่" เสมอ แน่นอนว่าเราไม่รู้ยังไม่มีข้อความแต่นั่นไม่เกี่ยวข้องคำตอบของทัวริง (ง่ายมาก) เช่นเดียวกับภาษา "ทฤษฎีบทสุดท้ายของแฟร์มาต์" มีจำนวนเต็มa,, ดังนั้น an+n=n สำหรับ n? "เมื่อเร็ว ๆ นี้" เรา "พบสิ่งนี้ ยังไม่มีข้อความ=2หลักฐานไต๋ไม่ได้เปลี่ยนภาษา
vonbrand

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

ตกลงบางทีอินพุตจำเป็นต้องระบุ TM และอัลกอริทึมจะตัดสินว่า TM คำนวณปัญหาหรือไม่ ต้องคิดมากกว่านี้ ... คิดว่ามีสูตรง่าย ๆ สำหรับปัญหาประเภทนี้โดยทั่วไปเชื่อมต่อปัญหาที่เปิดกับภาษาที่ไม่สามารถตัดสินใจได้ ... แต่ตกลงกันว่านี่ไม่ค่อยมีเอกสาร / กำหนดใน CS refs ... พบเพียงไม่กี่กระจัดกระจาย refs ... หรือบางทีการป้อนข้อมูลเป็นหลักฐานและภาษายืนยันว่าการพิสูจน์นั้นถูกต้อง ... คำตอบที่ได้รับการโหวตสูงอื่น ๆ พูดถึงตัวเลขที่สมบูรณ์แบบแปลก ๆ ปัญหา collatz ฯลฯ ... โปรแกรมไม่ทราบว่าจะหยุดหรือไม่ .
vzn

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

0

เขียนโปรแกรมง่าย ๆ ที่ตรวจสอบว่าสำหรับทุก n 1n1050ลำดับ Collatz ที่ขึ้นต้นด้วย n จะไปถึงหมายเลข 1 ในเวลาน้อยกว่าหนึ่งพันล้านครั้ง เมื่อมีคำตอบให้โปรแกรมหยุดถ้าคำตอบคือ "ใช่" และปล่อยให้มันวนซ้ำตลอดไปหากคำตอบคือ "ไม่"

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

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