특정 입력 / 가정에 대해 중지 문제를 계산할 수 있습니까?


19

정지 문제를 계산할 수 없다는 증거에 대한 나의 이해에서, 우리가 프로그램 x가 정지하는지 여부를 계산하는 프로그램 P (x)를 가지고 있다면 P를 같은 P, P (P), P가 P를 사용하지 않는지를 결정하려고합니다.

그래서 내 질문은 : 입력으로 사용되는 다른 모든 프로그램에 대해 프로그램 P로 문제를 계산할 수 있습니까? P 자체입니까? 즉,이 특별한 경우에만 문제를 중지시킬 수 있습니까? 아니면 증거가 더 일반적이며 누락 된 것이 있습니까?


정지 문제를 계산할 수 없다는 증거를 오해하고 있다고 생각합니다. P는 항상 프로그램이 유한 시간 내에 정지하는지 여부를 결정하므로 P (P)는 true를 반환합니다. 모순에 도달하기 위해 약간 까다로운 구성을 수행해야합니다.
Dan Staley

정지 문제를 해결할 수있는 많은 프로그램이 있는지 물어 보면 더 좋고 실질적으로 더 적절한 답변을 얻을 수 있다고 생각합니다. 결국 많은 프로그램이 공식적으로 검증 될 수 있으며, 여기에는 주어진 입력으로 중지하는지 여부에 대한 결정이 포함됩니다. 나는 그 그룹을 결정할 수 없다고 생각한다. (그것이 해결할 수 있기 때문에 ..., 당신은 알고있다.) 대부분의 실제 프로그램에 대해, 관련 입력을 위해 그들이 멈추는 지 말아야 할 장애물이 없다고 생각한다.
피터-복원 모니카

답변:


10

경우 임의의 계산 가능한 기능하고있다 g 으로 정의fg

g(n)={f(n)if nkvotherwise

선택하면 계산할 수 있습니다.k,v

기본적으로 n = k를 제외한 모든 n에 대해 g ( n ) 을 계산 하는 프로그램 있는 경우 해당 사례를 "수정"하고 (예 :) g ( n ) 을 계산하는 다른 프로그램 P 를 얻을 수 있습니다. 모든 n .Pg(n)nn=kif then elsePg(n)n

따라서 "한 경우를 제외하고"중지 기능을 계산할 수 있으면 중지 기능도 예외없이 계산할 수 있습니다. 그로부터 평소와 같이 모순을 얻을 수 있습니다.

결론 : 아니오, 중지 문제를 "한 사례를 제외하고"(또는 "무한한 경우 제외") 결정할 수 없습니다.


1
좋아, 나는 수학적으로 그것을 얻었다 고 생각하지만 ... 궁금합니다 : HP를 계산하는 프로그램을 작성하려고하면 어떤 구체적인 문제가 발생합니까? 어떤 시점에서 그런 프로그램을 작성할 수 없다는 것을 왜 그리고 어떻게 이해할 것입니까?
Alessio Martorana

@AlessioMartorana 그것은 달려 있습니다 : 당신은 어떻게 그런 문제에 접근 할 것입니까? 주요 문제는 가 입력이 중단되지 않는 프로그램 인 경우에도 항상 P 를 중지해야한다는 것입니다. 따라서 입력 프로그램을 시뮬레이션 할 수는 없습니다. P
chi

그리고 우리가 입력 프로그램의 코드를 볼 수 있다고 가정합니까? 코드에서 프로그램이 멈추는 지 확인할 수 없습니까?
Alessio Martorana

2
@AlessioMartorana 실제로 코드를 볼 수 있지만 예를 들어 while 루프가 있으면 일반적으로 많이 말할 수 없습니다. while 루프는 임의의 수학적 추측에 대한 가능한 모든 증거를 확인하고 증거가 발견 된 경우에만 중지합니다. 이 루프가 중단되는지 여부를 결정한다는 것은 추측이 가능한지 여부를 결정하는 것을 의미합니다. HP를 해결하면 공식 수학 문제에 대해 예 (증명) / 아니요 (증명 불가)로 대답 할 수있는 기계를 얻을 수 있습니다. 그것은 비현실적으로 강력 할 것입니다.
chi

1
@AlessioMartorana HP를 해결하는 프로그램을 작성했다고 생각한 경우 프로그램이 실패 할 수있는 위치는 다음 두 가지 방법 중 하나입니다. 일부 프로그램의 경우 잘못된 결과를 반환 할 수 있습니다 (일치하지 않거나 무언가가 말을 멈 추면 t) 중단 될 때) 및 / 또는 결정 프로그램 자체는 많은 입력에서 중단되지 않으며 실제로 중단되지 않는지 또는 답을 계산하는 데 더 많은 시간이 필요한지 알 수 없습니다.
Shufflepants

21

P 대신 자체 입력으로 사용되는 다른 모든 프로그램에 대해 프로그램 P가 중지 문제를 계산합니까?

제 프로그램의 무한한 순서 고려 , P는 내가 한다 "헤드 이동 i 서  오른쪽으로 사각형을하고  사각형이 왼쪽에, 다음 정확히 뭘 P는 할 것입니다." 이러한 프로그램은 모두 모든 입력에 대해 P 와 정확히 동일한 출력을 생성   하지만 ( P가 영원히 반복되는 경우 영원히 반복 포함 ) 모두 다른 프로그램입니다.P1,P2,PiiiPPP

그리고 그 속성도 결정할 수 없기 때문에 와 기능적으로 동등하지 않은 프로그램 에서만 P 를 사용하도록 함으로써이 문제를 해결할 수 없습니다 . 아마도 해당 인스턴스로 제한되면 문제를 결정할 수는 없지만 (아마 의심하지는 않지만) 인스턴스 세트를 결정할 수 없으므로 실제로 제한을 수행 할 수 없었습니다.P


15
마지막 문장이 사실이라고 생각하지만 속성을 결정할 수 없기 때문에 해당 속성을 기반으로 입력 세트를 제한하면 문제를 결정할 수 없다고 생각하지 않습니다. 벙어리 예를 들어, 입력 세트를 종료 프로그램 (결정 불가능한 특성)으로 제한 한 경우 문제점을 결정할 수 있습니다 (항상 true를 리턴하는 프로그램에 의해).
Owen

3
@Owen 제한 자체를 결정할 수없는 경우 제한을 적용 할 수 없으므로 실제로는 아무 것도 구입할 수 없습니다.
David Richerby

5

특정 클래스의 프로그램이 멈추거나 멈추지 않음을 보여주는 알고리즘이 있습니다. 예를 들어

  • 유한 상태 머신을 모델링하는 프로그램이 중지되는지 알고리즘 적으로 판별 할 수 있습니다.
  • 선형 바운드 튜링 기계의 정지 여부를 산술적으로 판단 할 수 있습니다
  • 프로그램이 어떤 복잡성 클래스에 속하는지 알고 있으면 프로그램이 유한 입력에 대해 정지한다는 것을 알고 있습니다.

임의의 프로그램이 정지하는지 여부를 판별하는 알고리즘은 없지만 대부분의 코드는 정지 (대부분의 서브 루틴처럼) 또는 정지하지 않도록 (이벤트를 처리하기위한 무한 루프와 같이) 설계되었으며 어느 것이 어떤 것인지를 알고리즘 적으로 결정할 수 있습니다. 즉, 당신은 할 수 있습니다 응답 중 하나 "가 정지가", 또는 "나는 몰라"를 "중단하지 않는다"고 알고리즘을 가지고 있고, 이러한 알고리즘이 유용 할만큼 프로그램을 포함하도록 설계 될 수있다.


이것이 goto와 어떤 관련이 있습니까? 유한 상태 머신을 모델링하는 한 goto를 사용하고 중지 여부를 결정하는 프로그램을 가질 수 없습니까?
Bergi

나는 for-loops의 관점에서 정지에 대해 글을 쓰고 나서 유한 상태 기계와 그 밖의 것들에 대해 이야기하기 위해 그것을 바꿨습니다
Antonio Perez

4

모순에 의한 증거는 철저 하지 않아도되며 , 단일 반론만으로 충분합니다. 정지 문제를 결정할 수 없다는 증거는 정지 특성을 결정할 수없는 P의 한 가지 예를 제공합니다. 이 증거는 P가 유일한 그러한 프로그램이라고 진술하지 않으며, 실제로 완전히 다른 클래스의 P를 구성하는 독립적 인 증거가 존재할 수 있습니다.


3

증거는 참으로 더 일반적이다 : 앞뒤가 맞지 않는 문제의 특별한 경우이다 라이스의 정리 , 상태

Φ

ABΦ(A)Φ(B)

xx

당신은 할 수 이러한 제한은 상당히 과감한해야하지만, 작업 할 프로그램의 공간을 제한함으로써 어떤 결과를 얻을 수 있습니다. 예를 들어, 주어진 프로그램이 100 단계 내에서 중단되거나 영원히 실행된다고 보장되면 중단 여부를 결정합니다.

NkBB(k)


1
N

1
마지막 단락은 바쁜 비버와 비슷합니다.
Evil

"정말 과감한"제한과 관련하여, 총 프로그래밍 언어는 중요한 것입니다. 그것들은 비교적 높은 수준의 정교함을 요구하는 경향이 있으므로, 당신은 그 과감한 것을 고려할 수도 있지만, 아마도 중단되는 프로그램의 공간에서 실제 문제를 해결할 수 있습니다.
벤 밀우드

en.wikipedia.org/wiki/Rice%27s_theorem에 대한 링크를 포함하면 IMO에 적합합니다.
Dmitry Grigoryev

고마워, 나는 대답을 업데이트했다. @BenMillwood 확실히, 그러나 그들의 해결책이 "모든 것을 멈춘다"는 점을 감안할 때 나는 그것이 실제로 Alessio가 찾고있는 것이 확실하지 않다. 정지 동작이 결정 가능하지만 사소하지 않은 경우가 흥미로울 것입니다. 아마도 Agda + coinductive type?
Anton Golov

0

R은 재귀 적으로 열거 가능하지만 비 재귀 세트로 둡니다. 그러한 많은 세트가 무한히 있습니다. k가 R에있는 경우에만 입력 k에서 정지하는 튜링 기계라고하자. 이러한 T는 재귀 적으로 열거 가능한 세트에 존재한다. 이 T에 대한 정지 문제를 해결할 수있는 프로그램을 작성하는 것은 불가능합니다. 이는 T 정지가 R의 멤버 자격을 결정하는 알고리즘을 생성하는지 여부를 결정하는 알고리즘이 있기 때문입니다. 이는 R이 비재 귀적이면 불가능합니다. 각각 다른 튜링 기계를 제공하는 그러한 R이 무한히 많기 때문에, 프로그램 P를 중지 시키려고 시도한 모든 튜링 기계가 무한히 많이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.