정지 문제는 주어진 프로그램이 정지하는지 여부를 결정하는 알고리즘이 없음을 나타냅니다. 결과적으로 종료 여부를 알 수없는 프로그램이 있어야합니다. 그러한 프로그램의 가장 간단한 (가장 작은) 알려진 예는 무엇입니까?
정지 문제는 주어진 프로그램이 정지하는지 여부를 결정하는 알고리즘이 없음을 나타냅니다. 결과적으로 종료 여부를 알 수없는 프로그램이 있어야합니다. 그러한 프로그램의 가장 간단한 (가장 작은) 알려진 예는 무엇입니까?
답변:
정지 문제는 주어진 프로그램이 정지하는지 여부를 결정하는 알고리즘이 없음을 나타냅니다. 결과적으로 종료 여부를 알 수없는 프로그램이 있어야합니다.
"우리"는 알고리즘이 아닙니다 =) 주어진 프로그램 이 모든 프로그램에 대해 정지 하는지를 판단 할 수있는 일반적인 알고리즘 은 없습니다 .
그러한 프로그램의 가장 간단한 (가장 작은) 알려진 예는 무엇입니까?
다음 프로그램을 고려하십시오.
n = 3
while true:
if is_perfect(n):
halt()
n = n + 2
is_perfect 함수는 n이 완벽한 숫자 인지 확인합니다 . 홀수의 완벽한 숫자가 있는지 알 수 없으므로이 프로그램이 중지되는지 여부를 알 수 없습니다.
당신은 쓰기:
정지 문제는 주어진 프로그램이 정지하는지 여부를 결정하는 알고리즘이 없음을 나타냅니다. 결과적으로 종료 여부를 알 수없는 프로그램이 있어야합니다.
이것은 양방향에서 비평 행입니다. 해결 해야 할 일반적인 오류에 굴복합니다 .
고정 된 프로그램 주어지면 정지 문제 ( " P 는 항상 멈추는가 ?")는 항상 "예"또는 "아니오"이므로 결정 가능합니다. 그것이 무엇인지 알 수 없더라도, 두 가지 사소한 알고리즘 중 하나는 항상 "예"라고 대답합니다. "아니오"는 P- 멈춤 문제를 해결합니다 .
알고리즘이 모든 ¹ 프로그램의 Halting 문제를 해결해야하는 경우에만 해당 알고리즘이 존재할 수 없음을 보여줄 수 있습니다.
이제 Halting 문제를 결정할 수 없다는 것을 아는 것은 아무도 종료 또는 루핑을 증명할 수없는 프로그램이 있음을 의미하지 않습니다 . 당신은 (단지 가설이 아니라 입증 된 사실이다) 튜링 기계보다 더 강력하지 않더라도, 우리가 알고있는 모든 단일 알고리즘 / 사람을 위해 그런 증거를 제공 할 수 있다는 것입니다 모든 프로그램. 각 프로그램마다 다른 사람이 결정할 수 있습니다.
더 관련 독서 :
따라서 실제 질문 (아래 반복)은 중지 문제가 계산 가능한지 여부와 관련이 없음을 알 수 있습니다. 조금도.
[우리가 멈추거나 고리를 모르는 프로그램]의 가장 간단한 (가장 작은) 알려진 예는 무엇입니까?
이것은 그 자체로 유효한 질문입니다. 다른 사람들은 좋은 대답을했습니다. 기본적으로, 당신은 모든 문을 변형 할 수있다 예에 알 수없는 진리 값을, 그것은 제공 하지 진리 값이 :
물론 이것들은 "자연스럽지"않다.
특정 속성을 가진 숫자의 존재에 관한 열린 문제는 그러한 프로그램 (그러한 숫자를 검색하는 프로그램)을 발생시킵니다. 예를 들어 Collatz 추측을 생각해보십시오. 우리는 그것이 사실인지 알지 못하기 때문에 다음 프로그램이 종료되는지 여부도 알 수 없습니다.
n:=1;
found:=false;
while not found do
s:={};
i:=n;
while i not in s do
add i to s;
if i even then i:=i/2 else i:=3i+1
if 1 not in s then found:=true;
n:=n+1
감안할 바쁜 비버 문제 5 상태 -2- 심볼 튜링 기계 해결되지 만 5 상태 및 두 심볼 튜링 기계가 있어야 정지 도시되지 하였는지 빈 테이프 시작한 . 그것은 매우 짧고 간결하며 폐쇄 된 프로그램입니다.
결정 가능성 (CS 등가 형식화 / 정지 문제의 일반화)이 언어 와 관련되어 있으므로 해당 형식으로 다시 변환해야하기 때문에 문제는 까다 롭습니다 . 이것은 지적되지 않은 것처럼 보이지만 수학 / CS의 많은 열린 문제는 알 수없는 결정 가능성의 문제 (언어)로 쉽게 변환 될 수 있습니다. 이것은 이론 증명과 결정 불가능한 분석 사이의 밀접한 관련성 때문입니다. 예를 들어 (정확한 숫자를 가진 다른 대답과 마찬가지로), 그리스어 (2 백만 년 전)에 이르는 쌍둥이 프라임 추측 을 취하십시오 . 예를 들어 Zhang / Tao와 같은 최근의 주요 연구 발전이 적용됩니다. 다음과 같이 알고리즘 문제로 변환하십시오.
입력 : n . 출력 : Y / N 최소 n 개의 트윈 프라임이 있습니다.
알고리즘은 트윈 프라임을 검색하고 n 을 찾으면 중지 합니다. 이 언어 를 결정할 수 있는지는 알 수 없습니다. 쌍둥이 소수 문제의 해결 (유한 또는 무한 수를 묻는) 은이 언어의 결정 가능성을 해결할 것입니다 (유한 한 경우 얼마나 많은 것이 입증되거나 발견 된 경우).
또 다른 예는 리만 가설을 사용 하여 다음 언어를 고려하십시오.
입력 : n . 출력 : Y / N Riemann 제타 함수의 최소 n 개의 사소한 0 이 존재 합니다.
이 알고리즘은 사소한 0을 검색합니다 (코드는 특히 복잡하지 않으며 근본 발견과 유사하며 비교적 간단한 다른 동등한 공식이 있으며 기본적으로 x 보다 작은 모든 소수의 "패리티"의 합을 계산 합니다). 찾은 N 그들과 다시는이 언어가 decidable 해상도는 리만 추측을 해결하는 "거의"일치하는 경우는 알려져 있지 않다.
이제 더 멋진 예는 어떻습니까? ( 주의, 아마도 더 논쟁의 여지가 있습니다)
입력 : c : 출력 : Y / N SAT에 대한 O (n c ) 알고리즘이 있습니다.
유사하게,이 언어의 결정 가능성의 해결은 P 대 NP 문제와 거의 같습니다 . 그러나이 경우 문제에 대한 "간단한"코드의 경우는 덜 분명합니다.
모든 n에 대한 여부를 확인하는 간단한 프로그램을 작성하십시오. n으로 시작하는 Collatz 시퀀스는 10 억 회 미만으로 1에 도달합니다. 응답이 있으면 응답이 "예"이면 프로그램을 중지시키고 응답이 "아니오"이면 영원히 반복하십시오.
이 프로그램의 종료 여부를 알 수 없습니다. (우리는 누구입니까? "우리"는 내 답변에 의견을 추가 할 수있는 사람이라고 가정하겠습니다. 그러나 매우 강력한 컴퓨터를 가진 사람이 말할 수 있습니다. 일부 천재 학자가 말할 수도 있습니다. 다소 작은 n이있을 수 있습니다. n n억 반복이 필요한 곳; 그것은 많은 결의와 많은 시간과 많은 돈을 가진 사람에게 다가 갈 것입니다. 그러나 지금 우리는 말할 수 없습니다.