หากปัญหาการหยุดชะงักไม่ชัดเจนเกินไปให้คิดแบบนี้
รับปัญหาทางคณิตศาสตร์ที่เชื่อว่าจะเป็นจริงสำหรับทุกจำนวนเต็มบวกของnแต่ยังไม่ได้รับการพิสูจน์แล้วว่าเป็นจริงสำหรับทุกn ตัวอย่างที่ดีคือการคาดคะเนของ Goldbachว่าจำนวนเต็มบวกใด ๆ ที่มากกว่าสองจะแสดงด้วยผลบวกของจำนวนเฉพาะสองช่วง จากนั้น (ด้วยไลบรารีขนาดใหญ่ที่เหมาะสม) ให้เรียกใช้โปรแกรมนี้ (pseudocode ดังนี้):
for (BigInt n = 4; ; n+=2) {
if (!isGoldbachsConjectureTrueFor(n)) {
print("Conjecture is false for at least one value of n\n");
exit(0);
}
}
การดำเนินการของisGoldbachsConjectureTrueFor()
เหลือเป็นแบบฝึกหัดสำหรับผู้อ่าน แต่เพื่อจุดประสงค์นี้อาจซ้ำง่ายกว่าทุกช่วงเวลาน้อยกว่าn
ทีนี้เหตุผลข้างต้นต้องเท่ากับ:
for (; ;) {
}
(เช่นวงวนไม่สิ้นสุด) หรือ
print("Conjecture is false for at least one value of n\n");
การคาดคะเนของ Goldbach จะต้องเป็นจริงหรือไม่จริง หากคอมไพเลอร์สามารถกำจัดรหัสที่ตายแล้วจะมีรหัสตายตัวแน่นอนที่จะกำจัดที่นี่ในทั้งสองกรณี อย่างไรก็ตามในการทำเช่นนั้นอย่างน้อยที่สุดคอมไพเลอร์ของคุณจะต้องแก้ปัญหายากโดยพลการ เราสามารถให้ปัญหาที่พิสูจน์ได้ยากว่าจะต้องแก้ปัญหา (เช่นปัญหา NP-complete) เพื่อกำหนดบิตของโค้ดที่จะกำจัด เช่นถ้าเราใช้โปรแกรมนี้:
String target = "f3c5ac5a63d50099f3b5147cabbbd81e89211513a92e3dcd2565d8c7d302ba9c";
for (BigInt n = 0; n < 2**2048; n++) {
String s = n.toString();
if (sha256(s).equals(target)) {
print("Found SHA value\n");
exit(0);
}
}
print("Not found SHA value\n");
เรารู้ว่าโปรแกรมจะพิมพ์ "Found SHA value" หรือ "Not Found SHA value" (คะแนนโบนัสถ้าคุณสามารถบอกได้ว่าอันไหนเป็นจริง) อย่างไรก็ตามสำหรับคอมไพเลอร์ที่จะสามารถเพิ่มประสิทธิภาพที่เหมาะสมที่จะใช้คำสั่งของการทำซ้ำ 2 ^ 2048 ในความเป็นจริงมันจะเป็นการเพิ่มประสิทธิภาพที่ดีที่สุดเท่าที่ฉันคาดการณ์โปรแกรมข้างต้นจะ (หรืออาจ) ทำงานจนกว่าความร้อนจากจักรวาลมากกว่าการพิมพ์อะไรโดยไม่มีการเพิ่มประสิทธิภาพ