ฉันมีปัญหาในการทำความเข้าใจการพิสูจน์ความลังเลของปัญหาการหยุดชะงัก
หากผลตอบแทนไม่ว่าจะเป็นโปรแกรมหรือไม่หยุดกับการป้อนข้อมูลขทำไมเราต้องผ่านรหัสของPสำหรับทั้งและข ?
ทำไมเราไม่ป้อนด้วยPและป้อนข้อมูลโดยพลการพูดx ?
ฉันมีปัญหาในการทำความเข้าใจการพิสูจน์ความลังเลของปัญหาการหยุดชะงัก
หากผลตอบแทนไม่ว่าจะเป็นโปรแกรมหรือไม่หยุดกับการป้อนข้อมูลขทำไมเราต้องผ่านรหัสของPสำหรับทั้งและข ?
ทำไมเราไม่ป้อนด้วยPและป้อนข้อมูลโดยพลการพูดx ?
คำตอบ:
หลักฐานมีวัตถุประสงค์เพื่อค้นหาความขัดแย้ง คุณต้องเข้าใจว่าความขัดแย้งที่ได้มาคืออะไรเพื่อที่จะเข้าใจว่าเหตุใดจึงถูกใช้เป็นอินพุตสำหรับตัวมันเอง ความขัดแย้งคือไม่เป็นทางการ: หากเรามีเครื่อง H (a, b) ที่ตัดสินใจว่า "a accepts b" เราสามารถสร้างเครื่องที่ยอมรับเครื่องที่ไม่ยอมรับตัวเอง (อ่านสองสามครั้งจนกว่าคุณจะรับมัน) เครื่องที่แสดงในภาพ - เรียกมันว่าM - M ( P ) =ทำPไม่ยอมรับ ?
ความขัดแย้งเกิดขึ้นเมื่อคุณถามว่า: ทำยอมรับหรือไม่ พยายามหาทางเลือกสองทางเพื่อดูว่ามีความขัดแย้งอย่างไร
ยอมรับ ⟨ M ⟩ถ้าหาก Mเท่านั้นไม่ยอมรับ ; นี่เป็นสิ่งที่ขัดแย้งกันอย่างชัดเจน
นี่คือเหตุผลที่มันเป็นสิ่งจำเป็นสำหรับการพิสูจน์การเรียกใช้ บนตัวเองไม่ใช่อินพุตโดยพลการ นี่เป็นรูปแบบทั่วไปในการพิสูจน์ความเป็นไปไม่ได้ที่รู้จักกันในชื่ออาร์กิวเมนต์แนวทแยง
ไม่ต้องสนใจภาพสักครู่ เราจะไปถึงในไม่ช้า โปรแกรมควรจะเป็นผู้ทดสอบหยุด: เมื่อเราให้Hการป้อนข้อมูลของโปรแกรมการ(คิดเป็นรายชื่อของโปรแกรม) และสิ่งที่ทุกสำหรับข , H ( , B )ทำหน้าที่ดังต่อไปนี้
อาร์กิวเมนต์ที่เป็นไปไม่ได้ที่จะสร้างนั้นขึ้นอยู่กับการกระทำของโปรแกรม "วิปริต" โดยเฉพาะคือPซึ่งใช้Hเป็นรูทีนย่อย Pรับอินพุตเป็นรายการของโปรแกรมใด ๆ , xและทำสิ่งต่อไปนี้:
P(x) =
  run H(x, x)
  if H(x, x) answers "yes"
      loop forever
  else
      halt
ไม่ยากที่จะเห็นว่า
จะหยุดถ้าหากโปรแกรม xจะทำงานตลอดไปเมื่อได้รับคำอธิบายเป็นอินพุต
จนถึงตอนนี้ดีมาก: จะเป็นโปรแกรมตราบใดที่รูทีนย่อยHเป็นโปรแกรม
ตอนนี้กลับไปที่รูปภาพ จะเกิดอะไรขึ้นถ้าให้คำอธิบายเป็นอินพุต? ภาพอธิบายเพียงสถานการณ์นั้น: ให้pเป็นคำอธิบายของโปรแกรมPจากนั้นแทนลงในส่วนที่ไฮไลต์ด้านบนเราจะได้
จะหยุดถ้าหากโปรแกรม P ( p )จะทำงานตลอดไป
เห็นได้ชัดว่าพฤติกรรมขัดแย้งนี้เป็นไปไม่ได้ดังนั้นเราจึงถูกบังคับให้ข้อสรุปว่า subroutine ไม่สามารถเป็นผู้ทดสอบหยุดชะงักเพราะมันล้มเหลวในกรณีหนึ่งที่มันได้รับ( P , P )เป็น input อาจมีบางกรณีที่Hทำงานได้อย่างที่ควรจะเป็น แต่เนื่องจากHล้มเหลวในสถานการณ์อย่างน้อยหนึ่งสถานการณ์จึงไม่สามารถหยุดการทดสอบได้อย่างสมบูรณ์ตามที่ต้องการ
Hไม่ได้รับการโทรติดต่อมากกว่าหนึ่งครั้งไม่มีการเรียกซ้ำในกรณีPใด ๆ H(P, P)ไม่ได้ดำเนินการPเพียงแค่ "วิเศษ" กำหนดว่าจะPหยุดหรือไม่เมื่อผ่านตัวเอง
                    H(P,P)ไม่จำเป็นต้องดำเนินการPแต่จะต้องดำเนินการH(x ↦ H(x,x), P)เป็นส่วนหนึ่งของการพิจารณาว่าPหยุดหรือไม่ ซึ่งขยายไปH(x ↦ H(y ↦ H(y,y), x), P)เรื่อย ๆ
                    Hไม่ได้ระบุไว้ในหลักฐานนี้ ดังนั้นไม่ต้องดำเนินการอะไรไม่ว่าจะเป็นPหรือของตัวเอง การพิสูจน์เริ่มต้นด้วยการสันนิษฐานว่ามีโปรแกรมบางอย่างHอยู่ซึ่งตัดสินใจแก้ปัญหาอย่างน่าอัศจรรย์จากนั้นก็พิสูจน์ให้เห็นว่าการดำรงอยู่ของโปรแกรมดังกล่าวจะขัดแย้งกันและไม่มีโปรแกรมดังกล่าวอยู่จริง
                    ลองพิสูจน์ให้ดีกว่าด้วยภาพเคลื่อนไหว และเนื่องจากคำตอบควรมีมากกว่าลิงค์ไปยังเว็บไซต์นี่คือคำตอบสำหรับคำถามของคุณ
อันดับแรกให้เราจำได้ว่าหลักฐานการไม่มีอยู่ของออราเคิล Halting ทำงานอย่างไร เราพิสูจน์ให้เห็นว่าผู้สมัครใด ๆHสำหรับออราเคิล Halting มีโปรแกรมPและอินพุตaที่Hล้มเหลวในการทำนายสิ่งที่ถูกต้องP(a)ทำ
ทฤษฎีบท:ปล่อยให้Hเป็นโปรแกรมใด ๆ ที่รับสองอินพุตและคืนค่าอย่างใดอย่างหนึ่งhaltหรือloopเสมอ จากนั้นจะมีโปรแกรมQและอินพุตaที่Q(a)หยุดถ้าและถ้าH(Q,a)กลับloopมา
พิสูจน์ พิจารณาโปรแกรม
program P(y):
  if H(y,y) = halt then
    loop forever
  else:
    return
ขอและQ = P a = Pอย่างใดอย่างหนึ่งH(Q,a) = haltหรือH(Q,a) = loop:
H(Q,a) = haltแล้วQ(a)(ซึ่งเป็นเพียงP(P)) Pวิ่งตลอดไปโดยความหมายของH(Q,a) = loopแล้วQ(a)หยุดโดย definitoin PของQED
คุณถามว่าทำไมเราพิจารณาH(P,P)แทนสำหรับบางคนอื่น ๆH(P,X) Xคำตอบที่ชัดเจนคือ "เพราะH(P,P)สิ่งที่ทำให้การพิสูจน์"! หากคุณใช้H(P,X)โดยพลการXคุณจะติดขัด แน่นอนหลักฐานจะมีลักษณะเช่นนี้:
หลักฐานหัก พิจารณาโปรแกรม
program P(y):
  if H(y,y) = halt then
    loop forever
  else:
    return
ให้Q = Pและสำหรับพลบางส่วนa = X Xอย่างใดอย่างหนึ่งH(Q,X) = haltหรือH(Q,X) = loop:
H(Q,X) = haltเราไม่สามารถบอกได้ว่าP(X)ทำอะไรเพราะไม่ว่าจะP(X)หยุดพักขึ้นอยู่กับสิ่งที่H(X,X)ส่งคืน เราติดอยู่ อย่างไรก็ตามหากเรารู้P(X)และX(X)เป็นเช่นเดียวกันเราสามารถสร้างความก้าวหน้าได้ (ดังนั้นเราควรจะใช้จริงๆX = P)H(Q,a) = loopX = Pไม่มี QED
ฉันหวังว่าสิ่งนี้แสดงให้เห็นว่าเราต้องพิจารณาH(P,P)เพื่อให้ความคิดของเราทำงานได้
The upshot of the proof is this analogy:
If a person claims s/he can recognize the sentiment of every person when s/he sees something, then ask the claimant to emulate the opposite of that sentiment in everyone s/he sees. And then put her/him in front of a mirror. S/he will just not know what sentiment to express. 🙂
The subscripts and are used to disambiguate the pronouns.