โปรแกรมสั้นมากที่ไม่ทราบสถานะหยุดพักคืออะไร


32

โปรแกรม 579 บิตในBinary แลมบ์ดาแคลคูลัสมีสถานะหยุดการทำงานที่ไม่รู้จัก:

01001001000100010001000101100111101111001110010101000001110011101000000111001110
10010000011100111010000001110011101000000111001110100000000111000011100111110100
00101011000000000010111011100101011111000000111001011111101101011010000000100000
10000001011100000000001110010101010101010111100000011100101010110000000001110000
00000111100000000011110000000001100001010101100000001110000000110000000100000001
00000000010010111110111100000010101111110000001100000011100111110000101101101110
00110000101100010111001011111011110000001110010111111000011110011110011110101000
0010110101000011010

กล่าวคือไม่ทราบว่าโปรแกรมนี้ยุติหรือไม่ ในการพิจารณาว่าคุณต้องแก้ไขการคาดคะเนของโคลลาตซ์ - หรืออย่างน้อยที่สุดสำหรับตัวเลขทั้งหมดไม่เกิน 2 ^ 256 ในพื้นที่เก็บข้อมูลนี้มีคำอธิบายที่สมบูรณ์เกี่ยวกับวิธีการรับโปรแกรมนี้

มีโปรแกรม BLC ที่สั้นกว่า (มาก) ที่ยังไม่ทราบสถานะหยุดพักหรือไม่?


6
คำถามที่เกี่ยวข้องมาก โหวตชุมชนกรุณา: ซ้ำกัน?
กราฟิลส์

9
งานการแสดงโปรแกรมดังกล่าวในขณะที่ไม่กี่บิตที่เป็นไปได้น่าจะเป็นปัญหาของรหัสกอล์ฟน้อยเพื่อให้คอมพิวเตอร์วิทยาศาสตร์
กราฟิลส์

2
ฉันคิดว่าคำตอบของ Ricky เกี่ยวกับ TM-5 TM นั้นดีกว่าคำตอบเดิม ถ้าอันนี้ปิดเป็นผู้ล่อลวงคำตอบสามารถย้ายได้หรือไม่
David Richerby


6
คุณไม่มีรายละเอียดที่สำคัญ: คุณไม่ได้ระบุภาษาที่โปรแกรมจะต้องเขียนตัวอย่างของคุณใช้แคลคูลัสแลมบ์ดา - เป็นภาษาเดียวที่คุณสนใจ เราเห็นได้ว่ามันเป็นเรื่องสำคัญที่จะพัฒนาโปรแกรม 1 บิตที่ไม่ทราบสถานะการหยุดชะงักโดยการฝังส่วนของอัลกอริทึมลงในภาษาโดยตรง มันเป็นช่องโหว่ แต่คุณต้องใส่ใจเมื่อขอคำแนะนำเกี่ยวกับกอล์ฟ พวกเขารักช่องโหว่ของพวกเขา! ความซับซ้อนของ Kolmogov อาจเป็นหัวข้อสำคัญในการสำรวจที่นี่
Cort Ammon - Reinstate Monica

คำตอบ:


30

ใช่. หน้านี้บอกว่ามี 98 5 รัฐเครื่องจักรทัวริงที่มีสถานะเป็นง่อยไม่เป็นที่รู้จัก น่ารำคาญที่มันไม่ได้ยกตัวอย่างของเครื่องดังกล่าว แต่หน้า 26 ปีนี้ได้ให้เครื่องทัวริง 5 สถานะ 5 เครื่องซึ่งสถานะการหยุดชะงักไม่ชัดเจนในเวลานั้น (การค้นหา "ตัวนับแบบง่าย" จะนำคุณไปทางขวาระหว่างที่ 2) ฉันคัดลอกพวกเขามาที่นี่ในกรณีที่ลิงก์ลงไป:

Input Bit   Transition on State     Steps            Comment
             A   B   C   D   E

    0       B1L C1R D0R A1L H1L   > 2*(10^9)       ``chaotic''
    1       B1R E0L A0L D0R C0L

    0       B1L A0R C0R E1L B0L       ?        complex ``counter''
    1       A1R C0L D1L A0R H1L

ด้านล่างของหน้าระบุว่า: $ Date: 2007/11/03 แล้วอายุ 26 ปีเป็นอย่างไร?
Falaque

1
@Falaque ส่วนบนสุดของหน้าระบุ "หน้านี้เป็นการเขียน HTML ของผู้เขียน ... เดือนกุมภาพันธ์ 1990" ข้อความมีอายุ 26 ปีการแสดงผลเป็น HTML มาจาก (หรืออัปเดตล่าสุด) ในปี 2007
IMSoP

5

การคาดคะเน Collatz:

โปรแกรมต่อไปนี้หยุดทำงานเสมอ:

void function( ArbitraryInteger input){
     while( input > 1){
            if(input % 2 == 0)
                input /= 2;
            else
                input = (input*3) + 1;
     }

     // Halt here
}

การเปลี่ยนแปลงเล็กน้อย (ยังคงเป็นการคาดเดาเพราะมันขึ้นอยู่กับผลลัพธ์จาก Collatz's):

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

void function( ArbitraryInteger input){
     while( input >= 1){ // notice the "="
            if(input % 2 == 0)
                input /= 2;
            else
                input = (input*3) + 1;
     }
}

โปรดทราบว่าโปรแกรมที่สองจะไม่หยุดโดยไม่คำนึงว่าโปรแกรมแรกจะหยุดหรือไม่

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

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

  • หาก Collatz มีการวนซ้ำตัวอย่างแบบวนซ้ำเท่านั้นความผันแปรของการคาดเดานั้นเป็นเท็จ

  • หาก Collatz เป็นเท็จโดยไม่มีลูปการแปรผันของการคาดเดานั้นเป็นจริง

  • หาก Collatz เป็นจริงรูปแบบจะเป็นเท็จ

  • หาก Collatz เป็นเท็จทั้งคู่เพราะมีลูปและเนื่องจากมีจำนวนที่มันเบี่ยงเบนความผันแปรของการคาดเดานั้นเป็นจริง (มันแค่ต้องการตัวเลขที่ diverges โดยไม่ต้องป้อนลูป)

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

แก้ไข: ฉันข้ามส่วนที่เกี่ยวกับการคาดคะเน Collatz ขอโทษฉันตอบด้วยหัวใจด้วยอัลกอริทึมที่ฉันอ่านเมื่อหลายปีก่อนฉันไม่ได้คาดหวังว่าจะถูกกล่าวถึงแล้ว

EDIT2: ความคิดเห็นทำให้ฉันสังเกตเห็นว่าฉันเขียนอัลกอริทึมด้วยความผิดพลาดอย่างไรก็ตามความผิดพลาดนั้นทำให้คำตอบของฉันแตกต่างจากการคาดคะเนของ Collatz (แต่เป็นการเปลี่ยนแปลงโดยตรง)


1
input > 1input >= 11421

คุณพูดถูกฉันต้องการที่จะวาง>อย่างไรก็ตามตราบใดที่เราไม่มีหลักฐานสำหรับการหยุดชะงักด้วย>เราไม่สามารถแน่ใจได้ว่าเราจะไปถึง1 -> 4 -> 2 -> 1ลูป (ตัวอย่างเช่นถ้ามันไม่ยุติเพราะ>มันไม่ได้ ' ไม่ถึง>=)
GameDeveloper

1
>=14211421>=>

2
n<1n=1n4n>1n11

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