정지 문제(停止問題, Halting Problem)는 판정 문제의 일종으로, 특정 프로그램과 입력값이 주어졌을 때 해당 프로그램이 계산을 끝내고 멈출지 아니면 영원히 계속 실행될지를 판정하는 문제이다. 1936년 앨런 튜링은 모든 가능한 입력값에 대해 정지 문제를 해결할 수 있는 일반적인 알고리즘은 존재하지 않는다는 사실을 수학적으로 증명하였다. 이는 컴퓨터 과학에서 해결 불가능한 문제가 존재함을 보여주는 대표적인 사례이다.

배너 광고

개요

정지 문제는 임의의 컴퓨터 프로그램과 그 프로그램에 들어갈 입력값이 주어졌을 때, 이 프로그램이 실행을 마친 후 정지할 것인지 아니면 무한히 실행될 것인지를 미리 알아낼 수 있는지를 묻는다. 모든 프로그램은 실행 시 유한한 절차를 거쳐 결과를 내놓거나, 혹은 무한 루프에 빠져 종료되지 않는 두 가지 상태 중 하나에 놓인다. 앨런 튜링은 튜링 기계를 통해 이 문제를 분석하였으며, 어떠한 단일 알고리즘으로도 모든 프로그램의 정지 여부를 판정할 수 없음을 밝혀냈다. 이를 '정지 문제는 튜링 기계에서 판정할 수 없다'고 표현한다.

역사적 배경

정지 문제의 판정 불가능성은 1936년 앨런 튜링에 의해 처음으로 증명되었다. 비슷한 시기인 1936년 4월, 알론조 처치 또한 람다 셈법을 이용하여 판정 불가능한 문제가 존재함을 독립적으로 증명하였다. 튜링의 증명은 같은 해 5월에 출판되었으며, 현대적인 컴퓨터의 모델인 튜링 기계 개념을 도입하여 문제를 정형화했다는 점에서 큰 의의를 갖는다. '정지(Halting)'라는 용어는 튜링이 직접 사용한 것은 아니며, 1950년대 마틴 데이비스의 연구를 통해 널리 보급된 것으로 알려져 있다.

증명 방법

정지 문제의 불가능성은 귀류법을 통해 증명된다. 만약 모든 프로그램의 정지 여부를 판정할 수 있는 프로그램 HH가 존재한다고 가정하면 다음과 같은 모순이 발생한다.

  1. 프로그램 H(P,I)H(P, I)는 프로그램 PP에 입력 II를 넣었을 때 정지하면 '참', 정지하지 않으면 '거짓'을 반환한다.
  2. HH를 이용해 새로운 프로그램 SS를 설계한다. SSH(P,P)H(P, P)가 '참'을 반환하면 무한 루프를 돌고, '거짓'을 반환하면 즉시 정지한다.
  3. 이제 SS에 자기 자신인 SS를 입력으로 넣는 경우(S(S)S(S))를 가정한다.
  4. 만약 S(S)S(S)가 정지한다면 H(S,S)H(S, S)는 '참'을 반환해야 하고, 설계에 따라 SS는 무한 루프를 돌아야 하므로 모순이다.
  5. 반대로 S(S)S(S)가 정지하지 않는다면 H(S,S)H(S, S)는 '거짓'을 반환해야 하고, 설계에 따라 SS는 정지해야 하므로 역시 모순이다.

이러한 논리적 모순에 따라 모든 경우를 완벽히 판정하는 프로그램 HH는 존재할 수 없다.

의의와 영향

정지 문제는 역사상 처음으로 컴퓨터로 해결할 수 없는 문제가 존재함을 증명한 사례이다. 이는 인간의 사고나 수학적 증명 과정이 기계적인 계산으로 모두 대체될 수 있는지에 대한 질문에 중요한 답을 제시하였다. 또한 계산 가능성 이론의 기초가 되었으며, 현대 컴퓨터 과학에서 알고리즘의 한계를 규정하는 핵심적인 원리로 작용한다. 실무적으로는 컴파일러의 최적화나 프로그램의 오류 검증, 보안 분석 등에서 모든 버그나 무한 루프를 자동으로 찾아내는 도구를 만드는 것이 이론적으로 불가능함을 시사한다.

환원과 확장

정지 문제의 판정 불가능성이 증명된 이후, 수많은 다른 문제들도 판정 불가능함이 밝혀졌다. 이를 증명하기 위해 '환원(Reduction)'이라는 기법이 사용된다. 환원은 새로운 문제 BB를 해결할 수 있는 방법이 있다면, 이를 이용해 이미 판정 불가능함이 증명된 정지 문제 AA를 해결할 수 있음을 보이는 방식이다. 만약 BB를 통해 AA를 풀 수 있다면, AA가 판정 불가능하므로 BB 역시 판정 불가능하다는 결론에 도달하게 된다.

참고 자료

5
정지 문제정지 문제 계산 복잡도 이론에서 정지문제(停止問題, halting problem)는판정 문제의 일종으로 다음과 같이 요약할 수 있다. 프로그램을 설명한 것과 처음 입력값이 주어졌을 때, 이 프로그램에 입력값을 넣고 실행한다면 이 프로그램이 계산을 끝내고 멈출지 아니면 영원히 계속 계산할지 판정하라. 1936년에앨런 튜링…https://ko.wikipedia.org/wiki/%EC%A0%95%EC%A7%80_%EB%AC%B8%EC%A0%9C튜링과 정지문제: 인간, 수학, 컴퓨터 – 고등과학원 HORIZON튜링과 정지문제: 인간, 수학, 컴퓨터 – 고등과학원 HORIZON .columns" style=" position: relative;"> 17954,17916 ##### 김상현 test EN Description: EN Position: EN Display Name: ###### 전) HORIZON 편집위원, 고등과학…https://horizon.kias.re.kr/19364/정지 문제 - 요다위키정지 문제 - 요다위키 ### Search # 정지 문제 Halting problem 계산 가능성이론에서 정지 문제는 임의의컴퓨터 프로그램과 입력에 대한 설명에서 프로그램이 실행을 마칠지 아니면 영원히 계속 실행될지를 결정하는 문제이다.앨런튜링은 1936년에 가능한 모든 프로그램-입력 쌍에 대해 정지 문제를 해결하기 위…https://www.yoda.wiki/wiki/Halting_Problem튜링의 업적이 지닌 철학적 함의 -'멈춤정리'를 중심으로- -한국수학사학회지 | Korea Science튜링의 업적이 지닌 철학적 함의 -'멈춤정리'를 중심으로- -한국수학사학회지 | Korea Science -- -- -- -- -- -- # 튜링의 업적이 지닌 철학적 함의 -'멈춤정리'를 중심으로- # Philosophical Implication of Turing's Work -Concentrated on Halti…https://koreascience.or.kr/article/JAKO201227932998756.page?lang=ko정지 문제 - 기계인간 John Grib정지 문제 - 기계인간 John Grib 증명 귀류법을 통한 증명 - H를 만드는 것이 가능하다고 가정하자 - H가 잘못된 결과를 리턴하는 경우를 찾아낸다 어떤 프로그램이 어떤 입력값을 받았을 때 유한한 단계의 절차를 마치고 멈추는지, 아니면 무한 루프하는지 판정하는 알고리즘이 존재하는가? ## 문제의 의의 세상엔 컴퓨…https://johngrib.github.io/wiki/problem/halting-problem/

관련 문서