정지 상태를 알 수없는 매우 짧은 프로그램은 무엇입니까?


32

이항 Lambda 미적분 에있는이 579 비트 프로그램은 정지 상태를 알 수 없습니다.

01001001000100010001000101100111101111001110010101000001110011101000000111001110
10010000011100111010000001110011101000000111001110100000000111000011100111110100
00101011000000000010111011100101011111000000111001011111101101011010000000100000
10000001011100000000001110010101010101010111100000011100101010110000000001110000
00000111100000000011110000000001100001010101100000001110000000110000000100000001
00000000010010111110111100000010101111110000001100000011100111110000101101101110
00110000101100010111001011111011110000001110010111111000011110011110011110101000
0010110101000011010

즉,이 프로그램의 종료 여부를 알 수 없습니다. 그것을 결정하기 위해서는 Collatz 추측을 해결해야합니다. 또는 적어도 2 ^ 256까지의 모든 숫자에 대해해야합니다. 이 저장소 에는이 프로그램을 얻는 방법에 대한 완전한 설명이 있습니다.

정지 상태를 알 수없는 더 짧은 BLC 프로그램이 있습니까?


6
매우 관련된 질문 입니다. 커뮤니티 투표, 제발 : 중복?
Raphael

9
가능한 몇 비트로에서 이러한 프로그램을 표현하는 작업의 문제 것으로 보인다 코드 골프 적은 컴퓨터 때문에, 과학 .
Raphael

2
5-state TM에 대한 Ricky의 대답은 원래 질문에 대한 것보다 낫다고 생각합니다. 이 항목이 속임수로 닫힌 경우 답변을 이동할 수 있습니까?
David Richerby 2016 년


6
주요 세부 사항이 누락되었습니다. 프로그램을 작성해야하는 언어를 지정하지 않았습니다.이 예제에서는 이진 람다 미적분학을 사용합니다. 알고리즘 본문을 언어 자체에 직접 삽입하여 정지 상태를 알 수없는 1 비트 프로그램을 개발하는 것은 사소한 일임을 알 수 있습니다. 허점이지만 골프 솔루션을 요청할 때주의해야합니다. 그들은 허점을 좋아 합니다! Kolmogov의 복잡성은 여기서 살펴볼 중요한 주제 일 수 있습니다.
Cort Ammon-복원 모니카

답변:


30

예. 이 페이지는 98 (5) 상태가 말한다 튜링 기계 그의 정지 상태 알 수가. 짜증나게도, 그러한 기계의 예를 제공하지는 않지만 이 26 세의 페이지 는 그 당시 정지 상태를 알 수없는 2 개의 5 상태 튜링 기계를 제공합니다. ( "간단한 카운터"를 검색하면 그 둘 사이에 바로 연결됩니다.)

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 년 2 월"입니다. 텍스트는 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의 결과를 기반으로하기 때문에 추측) :

일부 입력의 경우 다음 프로그램은 동일한 상태를 두 번 입력하지 않습니다 (여기서 "입력"이 보유한 값에 의해 상태가 결정됨).

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가 true이면 변형이 false입니다.

  • Collatz에 루프가 있고 발산하는 숫자가 있기 때문에 둘 다 거짓이면 추측의 변동이 참입니다 (루프에 들어 가지 않고 발산하는 숫자 만 필요).

나는 그 변형이 더 흥미 롭다고 생각한다. (우연히 그것을 발견하고 @LieuweVinkhuijzen 덕분에 그것을 발견했기 때문에) 실제로 실제 증거가 필요하기 때문이다. 무차별 강제 적용을 통해 언젠가는 루프를 찾을 수있을 것입니다 (그리고 70 개보다 긴 루프 일 것입니다. 현재 상태는 68보다 짧은 무한 루프를 가질 수 없다는 것입니다). 강제는 흥미롭지 않습니다 : 그것은 단지 숫자 위기입니다. 그러나 우리는 무한한 발산 시퀀스를 무차별 대입 할 수는 없으며 실제 증거없이 실제로 끝날지 여부는 알 수 없습니다.

편집 : Collatz Conjecture에 대한 부분을 건너 뛰었습니다. 미안합니다. 몇 년 전에 읽은 알고리즘으로 진심으로 대답했습니다. 이미 언급되지 않았습니다.

EDIT2 : 의견에 내가 실수로 알고리즘을 썼다는 것을 알았지 만 실수는 실제로 내 대답이 Collatz 추측과 다릅니다 (그러나 직접적인 변형).


1
input > 1input >= 11421

당신이 바로, 내가 넣어 싶어하는 >우리가 정지 다움에 대한 증거를 가지고 있지 않는 한 함께 그러나 한, >우리가 할 수 있는지 우리가 도달 할 1 -> 4 -> 2 -> 1것이 종료하지 않는 경우에 (루프 >가 '돈 t reach >=)
GameDeveloper 2016 년

1
>=14211421>=>

2
n<1n=1n4n>1n11

1
그건 사실입니다 :) 당신 말이 맞아, 나는 첫 번째 의견에 '콜라 츠 추측이 사실이라면'을 추가해야합니다. 편집 내용이 매우 좋습니다. '이 프로그램은 같은 상태를 두 번 입력하지 않습니다'라는 추측도 첫 번째 프로그램에서 해결되지 않기 때문에 두 번째 프로그램이 필요하지 않습니다. 무한대로 분기되지 않지만 대신 매우 높은 숫자의 어딘가에 큰 루프.
Lieuwe Vinkhuijzen 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.