정지 문제
본 서비스가 제공하는 내용 및 자료가 사실임을 보증하지 않습니다. 시스템은 언제나 실수를 할 수 있습니다. 중요한 의사결정 및 법리적 해석, 금전적 의사결정에 사용하지 마십시오.
정지 문제(停止問題, Halting Problem)는 판정 문제의 일종으로, 특정 프로그램과 입력값이 주어졌을 때 해당 프로그램이 계산을 끝내고 멈출지 아니면 영원히 계속 실행될지를 판정하는 문제이다. 1936년 앨런 튜링은 모든 가능한 입력값에 대해 정지 문제를 해결할 수 있는 일반적인 알고리즘은 존재하지 않는다는 사실을 수학적으로 증명하였다. 이는 컴퓨터 과학에서 해결 불가능한 문제가 존재함을 보여주는 대표적인 사례이다.
개요
정지 문제는 임의의 컴퓨터 프로그램과 그 프로그램에 들어갈 입력값이 주어졌을 때, 이 프로그램이 실행을 마친 후 정지할 것인지 아니면 무한히 실행될 것인지를 미리 알아낼 수 있는지를 묻는다. 앨런 튜링은 튜링 기계를 통해 이 문제를 분석하였으며, 어떠한 단일 알고리즘으로도 모든 프로그램의 정지 여부를 판정할 수 없음을 밝혀냈다. 이를 '정지 문제는 튜링 기계에서 판정할 수 없다'고 표현한다.
증명 방법
정지 문제의 불가능성은 귀류법을 통해 증명된다. 만약 모든 프로그램의 정지 여부를 판정할 수 있는 프로그램 가 존재한다고 가정하면 다음과 같은 모순이 발생한다.
- 프로그램 는 프로그램 에 입력 를 넣었을 때 정지하면 '참', 정지하지 않으면 '거짓'을 반환한다.
- 를 이용해 새로운 프로그램 를 설계한다. 는 가 '참'을 반환하면 무한 루프를 돌고, '거짓'을 반환하면 즉시 정지한다.
- 이제 에 자기 자신인 를 입력으로 넣는 경우()를 가정한다.
- 만약 가 정지한다면 는 '참'을 반환하고, 설계에 따라 는 무한 루프를 돌아야 하므로 모순이다.
- 반대로 가 정지하지 않는다면 는 '거짓'을 반환하고, 설계에 따라 는 정지해야 하므로 역시 모순이다.
이러한 모순에 따라 정지 여부를 완벽히 판정하는 프로그램 는 존재할 수 없다.
의의와 영향
정지 문제는 역사상 처음으로 컴퓨터로 해결할 수 없는 문제가 존재함을 증명한 사례이다. 이는 인간의 사고나 수학적 증명 과정이 기계적인 계산으로 모두 대체될 수 있는지에 대한 질문에 중요한 답을 제시하였다. 또한 계산 가능성 이론의 기초가 되었으며, 현대 컴퓨터 과학에서 알고리즘의 한계를 규정하는 핵심적인 원리로 작용한다. 컴파일러의 최적화나 프로그램의 오류 검증 등 실무적인 영역에서도 정지 문제의 판정 불가능성은 중요한 제약 조건이 된다.