Halting Problem의 결정 불가능한 증거를 이해하는 데 어려움을 겪고 있습니다.
만약 반환 프로그램 여부 입력에가 정지 왜 우리의 코드를 통과해야 할 모두 와 ?a b P a b
왜 에 와 와 같은 임의의 입력 을 공급할 수 없습니까?P x
Halting Problem의 결정 불가능한 증거를 이해하는 데 어려움을 겪고 있습니다.
만약 반환 프로그램 여부 입력에가 정지 왜 우리의 코드를 통과해야 할 모두 와 ?a b P a b
왜 에 와 와 같은 임의의 입력 을 공급할 수 없습니까?P x
답변:
증거는 모순을 찾는 것을 목표로합니다. 가 왜 자신에 대한 입력으로 사용 되는지 이해하려면 모순이 무엇인지 이해해야 합니다. 비공식적으로 모순은 : "a는 b를 받아 들인다"고 결정하는 기계 H (a, b)를 가지고 있다면 스스로 받아들이지 않는 기계를 받아들이는 기계를 만들 수있다. (읽기 당신이 때까지 몇 번 그것을 얻을.) 그림과 같이 기계를 -하자가 전화 - 않습니다 동의하지 ?M M ( P ) = P ⟨ P ⟩
당신이 요청하면 모순이 발생합니다 않는 동의 ? 모순이 있는지 두 가지 옵션을 찾아보십시오.⟨ 남 ⟩
⟨ M ⟩ M ⟨ M ⟩ 이 허용 하지 않는 경우에만 은 허용합니다 . ; 이것은 분명히 모순입니다.
그렇기 때문에 증거가 임의의 입력이 아닌 자체 를 실행하는 것이 필수적입니다 . 이것은 대각선 인수로 알려진 불가능한 증거에서 공통적 인 주제입니다.
잠시 동안 그림을 무시하십시오. 우리는 곧 그것을 얻을 것이다. 프로그램 중단 테스터 있어야하는데 우리가 줄 하는 A 프로그램의 입력 (생각 에 대한 모든에있는 프로그램의 목록으로) 아무것도 , 다음과 같이 행동H a a b H ( a , b )
를 구축 할 수 없다는 주장 은 를 서브 루틴으로 사용 하는 특정 "가상"프로그램 의 동작에 의존합니다 . 는 입력으로 프로그램 의 목록을 취하고 다음을 수행합니다.P H P x
P(x) =
run H(x, x)
if H(x, x) answers "yes"
loop forever
else
halt
그것을 보는 것은 어렵지 않습니다
x 는 입력으로 자체 설명이 주어지면 프로그램 가 영원히 실행될 경우에만 중단됩니다 .
지금까지 너무 좋은 : 확실히 프로그램을 것입니다 긴만큼 의 서브 루틴 프로그램입니다.H
이제 그림으로 돌아갑니다. 에 자체 설명 을 입력 하면 어떻게됩니까 ? 그림은 그 시나리오에 대해서만 설명합니다. 는 프로그램 의 설명이 되며 위의 강조 표시된 부분으로 대체하면p P
피 ( p )프로그램 가 영원히 실행될 경우에만 가 중지됩니다 .
분명히,이 역설적 인 행동은 불가능하기 때문에, 서브 루틴 는 입력으로 주어진 경우에 실패하기 때문에 정지 테스터가 될 수 없다는 결론을 내야합니다 . 어디 다른 경우가있을 수 있습니다 예상대로 작동하지만, 이후 적어도 하나의 상황에서 실패 필요에 따라, 그것은 완전한 정지 테스터가 될 수 없습니다.( P , P ) H H
H
는 두 번 이상 호출되지 않으며 재귀가 P
없습니다. H(P, P)
실행하지 않고 P
"매직 적으로" P
자체적으로 전달 될 때 중지 할지 여부를 결정합니다 .
H(P,P)
는 실행할 P
필요는 없지만 중단 H(x ↦ H(x,x), P)
여부를 결정하는 과정 에서 실행 해야합니다 P
. 어느쪽으로 확장 되는가 H(x ↦ H(y ↦ H(y,y), x), P)
.
H
이 증명 에는 구현 이 지정되어 있지 않습니다. 따라서 아닙니다 . 자체 이든 아니든 아무 것도 실행할 필요 가 없습니다 P
. 증거는 어떤 종류의 프로그램 H
이 존재하여 정지 문제를 마술로 결정 한다는 가정에서 시작하여 그런 프로그램의 존재가 모순이라는 것을 증명하기 위해 계속됩니다.
애니메이션 으로 예쁘게 교정 해보십시오 . 그리고 답변에는 사이트 링크 만 포함되어야하므로 질문에 대한 답변이 여기에 있습니다.
먼저, Halting 오라클이 존재하지 않는다는 증거가 어떻게 작동하는지 상기 해 봅시다. 우리는 어떤 후보 주어진 것을 증명 H
함침 된 오라클를 들어, 프로그램이 P
및 입력 a
되는 H
정확하게 예측할하지 P(a)
않습니다.
정리 : 하자가 H
소요 어떤 프로그램이 될 이 개 항상 입력과 반환하거나 halt
또는 loop
. 그런 다음 if 및 if 만 반환 하는 중지 하는 프로그램 Q
과 입력 이 있습니다 .a
Q(a)
H(Q,a)
loop
증명. 프로그램을 고려
program P(y):
if H(y,y) = halt then
loop forever
else:
return
하자 Q = P
및 a = P
. 하나 H(Q,a) = halt
또는 H(Q,a) = loop
:
H(Q,a) = halt
한 다음 Q(a)
(단지 인 P(P)
)의 정의에 의해 영원히 실행됩니다 P
.H(Q,a) = loop
한 다음 Q(a)
의 definitoin 의해 중단 P
.QED
왜 우리가 다른 사람 H(P,P)
대신에 우리를 고려했는지 물었습니다 . 확실한 대답은 " 증거가 작동 하기 때문 "입니다! 임의의을 사용했다면 멈출 것입니다. 실제로 증명은 다음과 같습니다.H(P,X)
X
H(P,P)
H(P,X)
X
깨진 증거. 프로그램을 고려
program P(y):
if H(y,y) = halt then
loop forever
else:
return
하자 Q = P
및 a = X
일부 임의의에 X
. 하나 H(Q,X) = halt
또는 H(Q,X) = loop
:
H(Q,X) = halt
우리는 무엇을 할 수 없다고 가정하십시오 . 우리는 붙어 있습니다. 우리가 알고 경우, 그리고 같은, 우리는 진전을 만들 수 있습니다. (그래서 우리는 정말로 가져 가야합니다 ).P(X)
P(X)
H(X,X)
P(X)
X(X)
X = P
H(Q,a) = loop
우리는 다시 붙어 있으며, 우리는 경우에 떨어지게 될 것이다 X = P
.QED가 없습니다.
이것이 H(P,P)
우리가 아이디어를 작동시키기 위해 고려해야한다는 것을 보여주기를 바랍니다 .