ฉันมีปัญหาในการทำความเข้าใจการพิสูจน์ความลังเลของปัญหาการหยุดชะงัก
หากผลตอบแทนไม่ว่าจะเป็นโปรแกรมหรือไม่หยุดกับการป้อนข้อมูลขทำไมเราต้องผ่านรหัสของ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) = loop
X = 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.