불완전한 프로그램 (예 : I / O 및 / 또는 시스템 전역 상태에 종속 된 상태)에 대해 중지 문제가 결정 불가능한 이유를 이해하는 것은 매우 간단합니다. 그러나 직관적으로, 이상적인 컴퓨터에서 순수한 프로그램의 정지는 정적 분석 등을 통해 결정될 수 있습니다.
이것은 사실입니까? 그렇지 않다면이 주장을 반증하는 반례 나 논문은 무엇입니까?
불완전한 프로그램 (예 : I / O 및 / 또는 시스템 전역 상태에 종속 된 상태)에 대해 중지 문제가 결정 불가능한 이유를 이해하는 것은 매우 간단합니다. 그러나 직관적으로, 이상적인 컴퓨터에서 순수한 프로그램의 정지는 정적 분석 등을 통해 결정될 수 있습니다.
이것은 사실입니까? 그렇지 않다면이 주장을 반증하는 반례 나 논문은 무엇입니까?
답변:
Halting 문제를 줄임으로써 결정할 수없는 증거입니다.
감소 : 기계 과 입력 주어지면 입력을 읽지 않고 테이프에 과 를 기록 하고 정지 할 때까지 을 시뮬레이션 하는 새로운 Turing Machine 를 만듭니다.
이 새로운 기계 의 동작은 입력 테이프와 무관하므로 정적 분석 만 적용 할 수 있는 순수한 Turing Machine입니다. 정적 분석이 충분하다면 정지 하는지 여부를 보여줄 수 있습니다 . 이는 이 에서 정지 하는지 여부를 보여줍니다 . 이로 인해 불순한 기계의 정지 문제를 해결할 수 있습니다.
아닙니다. 또한 I / O에 의존하지 않습니다.
간단한 반례 : 완벽한 홀수를 찾기 위해 프로그램을 작성하십시오 (이것은 열린 문제입니다 : 우리는 아직 존재하는지 여부를 알지 못합니다)-입력을받지 않고 불완전한 작업을 수행하지 않습니다 . 하나를 찾으면 중단되거나 무한히 작동 할 수 있습니다 (이러한 숫자가 존재하지 않는 경우). 정지 분석이 정지 사례를 결정하기에 충분히 강력하다면 정지는 이러한 숫자의 긍정적 인 존재를 의미하고 정지하지 않으면 그러한 숫자가 없지만 불행히도 정적 분석을 의미하는이 질문 (및 더 많은 질문)에 대답하는 데 사용됩니다. 그렇게 강력하지 않습니다.
대각선 화 에 의한 고전적인 증거 는 순수한 기계 이며 순수한 Turing Machine 일뿐만 아니라 "Open Problems"에 의존하지 않습니다.
예를 들어, Collatz Conjecture 를 실행하는 Turing 시스템 은 정지 상태를 알 수 없지만 Collatz Conjecture에 대한 우리의 무지에 의존합니다. (일부 입력의 경우 정지되지 않거나 항상 정지합니다).
따라서 Collatz Conjecture는 이미 귀하의 질문에 대답 할 수 있지만 (임시로) 우리가 모르는 것에 의존합니다 . 대신에 고전적인 증거는 해결 된 문제입니다. 우리는 이미 결정 불가능하다는 것을 알고 있습니다.
기록을 위해, 정지 문제의 결정 불가능성에 대한 표준 증거는 quines와 동일한 아이디어에 의존합니다. 일부 하위 용어는 전체 프로그램의 소스 코드로 평가되는 프로그램을 작성할 수 있다는 것입니다. 그런 다음 halts
프로그램의 소스 코드가 주어진 경우 해당 프로그램이 모든 입력에서 중지되면 True를 반환하고 그렇지 않으면 False를 반환 하는 함수 가 있으면 다음 과 같은 합법적 인 프로그램입니다.
prog() = if halts "prog" then prog() else ()
"prog"
소스 코드로 평가 된 표현식은 어디 에서 prog
; 그러나 prog
모든 입력에 대해 중단이 멈추지 않으면 중단되는 것을 빠르게 알 수 있습니다 . 이는 모순입니다. 이 증명의 어떤 것도 I / O에 의존하지 않습니다 (퀴네를 작성하려면 I / O가 필요합니까?).
그런데 I / O가 문제와 전혀 관련이 없다는 추가 증거를 보려면 "대화 상자 기반 I / O"를 참조하십시오 (기본적으로 I / O를 수행하는 프로그램은 입력을받는 프로그램으로 축소 될 수 있음). (명시 적) 기능적 인수 및 게으른 언어의 (명시 적) 추가 결과로 출력을 반환) 불행히도, 현재 웹에서 합리적이고 편견이없는 (또는 대화 상자) 페이지를 찾을 수 없습니다.