수학 개념 지도
논리와 계산(Logic and computation)

정지 문제(Halting problem)

임의의 프로그램과 입력을 받아 그 프로그램이 언젠가 멈출지를 언제나 옳게 판정하는 알고리즘⁠(algorithm)⁠은 없다. 대각선 논법⁠(diagonal argument)⁠의 계산 버전.

D(x)={영원히 반복H(x,x)=멈춤멈춤H(x,x)=무한D(x) = \begin{cases} \text{영원히 반복} & H(x, x) = \text{멈춤} \\ \text{멈춤} & H(x, x) = \text{무한} \end{cases}

프로그램 하나와 입력 하나를 받아, 그 프로그램이 그 입력에서 언젠가 멈출지 아니면 영원히 돌지를 언제나 옳게 답하는 프로그램 H가 있을까요? 그냥 돌려 보는 것으로는 부족합니다. 백만 걸음 뒤에도 멈추지 않았다면, 영원히 도는 것인지 백만한 걸음째에 멈출 것인지 알 수 없기 때문입니다. 1936년 튜링은 그런 H가 있을 수 없음을 증명했습니다. 튜링이 다룬 것은 '기계가 숫자를 끝없이 찍어 내는가'를 가리는 문제였고, 오늘날의 '멈추는가' 형태와 이름은 1950년대에 자리 잡았지만, 논증은 같습니다. 여기서 프로그램은 튜링 기계⁠(Turing machine)⁠든 파이썬 같은 범용 프로그래밍 언어든 상관없습니다. 메모리에 한계가 없다고 치면 둘은 서로를 흉내 낼 수 있기 때문입니다. 나아가 '어떤 기계적 방법으로도 안 된다'고 읽는 것은 처치–튜링 논제⁠(Church–Turing thesis)⁠에 기댑니다.

증명은 표 한 장입니다. 프로그램은 유한한 기호열이니 번호를 붙여 모두 늘어놓을 수 있습니다(가산). 행은 프로그램, 열은 입력으로 준 프로그램의 코드 ⟨Pj⟩\langle P_j \rangle이고, 칸에는 그 프로그램이 그 입력에서 멈추는지 적습니다. 그림의 여섯 프로그램은 입력 번호 j만 보고 이렇게 행동합니다.

노란 테두리가 대각선, 맨 아래 D의 줄은 대각선을 뒤집은 것입니다. 행 이름을 누르면 비교할 프로그램이 바뀝니다.

H가 있다고 해 봅시다. 그러면 H를 부품으로 써서 새 프로그램 D를 만들 수 있습니다. D는 입력 x를 받으면 H(x, x)를 물어, 'x가 자기 코드를 받으면 멈춘다'는 답이면 일부러 무한 반복에 빠지고, '영원히 돈다'는 답이면 곧바로 멈춥니다. D의 줄은 대각선을 한 칸씩 뒤집은 것입니다. D가 번째 프로그램이라고 해 봅시다. 어느 k를 골라도 같은 일이 일어나니 D는 목록에 없습니다. 그림에는 여섯 줄만 있지만 실제 목록은 모든 프로그램을 끝없이 늘어놓은 것이고, 논증은 어느 줄에서나 똑같습니다. 그러나 목록에는 모든 프로그램이 있었고 D도 분명 프로그램입니다. 모순이므로 H가 없습니다. 같은 이야기를 D에게 자기 코드를 주는 것으로 말할 수도 있습니다. D(⟨D⟩)가 멈춘다면 H가 '멈춘다'고 답했을 테니 D는 영원히 돌아야 하고, 멈추지 않는다면 곧바로 멈춰야 합니다.

칸토어의 대각선 논법⁠(Cantor's diagonal argument)⁠에서 뒤집은 대각선이 목록에 없는 실수⁠(real number)⁠를 만들었듯, 여기서는 목록에 없는 프로그램을 만듭니다. 러셀의 역설⁠(Russell's paradox)⁠의 '자기 자신을 원소⁠(element)⁠로 갖지 않는 집합⁠(set)⁠'과도 같은 모양입니다. 비슷한 시기에 미국 논리학자 알론조 처치도 람다 계산⁠(lambda calculus)⁠으로 판정할 수 없는 문제가 있음을 보였습니다. 정지 문제에서 곧바로 여러 결과가 나옵니다. 미국 논리학자 헨리 고든 라이스가 1953년에 증명한 라이스 정리⁠(Rice's theorem)⁠는, 프로그램이 '무엇을 계산하는가'에 관한 자명하지 않은 성질은 모두 판정할 수 없다고 말합니다. '이 프로그램은 어떤 입력에도 0을 출력하는가', '이 프로그램은 적어도 한 입력에서 멈추는가' 같은 질문이 그런 성질입니다. '자명하지 않다'는 그 성질을 가진 프로그램도, 갖지 않은 프로그램도 있다는 뜻입니다. 코드의 길이처럼 계산 결과가 아니라 코드 자체의 모양에 관한 성질은 여기에 들지 않습니다. 또 참인 산술 문장을 모두, 그리고 참인 것만 증명하는 형식 체계⁠(formal system)⁠가 있다면 정지 문제를 풀 수 있으므로, 여기서 불완전성 정리⁠(incompleteness theorem)⁠도 다시 얻어집니다.

판정할 수 없다는 것이 막연한 말이 아님을 보여 주는 예가 있습니다. 4 이상의 짝수를 차례로 보며 두 소수⁠(prime number)⁠의 합으로 쓸 수 없는 수를 찾으면 멈추는 짧은 프로그램은, 골드바흐 추측⁠(Goldbach's conjecture)⁠이 거짓이면 멈추고 참이면 영원히 돕니다. 골드바흐 추측은 '4 이상의 짝수는 모두 두 소수의 합이다'(예: 10 = 3 + 7)라는 추측으로, 1742년 프로이센의 수학자 크리스티안 골드바흐와 오일러가 주고받은 편지에서 나왔습니다. 이 프로그램 하나가 멈출지를 아는 것이 280년 넘게 풀리지 않은 난제를 푸는 일입니다.

이어지는 곳. 정지 문제가 불가능한 것은 '모든' 프로그램에 대해 판정하는 일입니다. 특정한 프로그램이 멈춘다는 것은 증명할 수 있는 경우가 많고, 입력을 한 번만 훑고 끝나는 유한 오토마톤⁠(finite automaton)⁠은 언제나 멈춥니다. 단순 타입 람다 계산⁠(simply typed lambda calculus)⁠의 프로그램도 언제나 멈추지만, 그 대가로 계산 가능한 함수⁠(function)⁠를 모두 적을 수는 없습니다. 끝나지 않음을 ⊥라는 자리로 수학 안에 적는 영역 이론⁠(domain theory)⁠에서는 '끝나지 않으면 참, 끝나면 거짓'인 함수가 정보의 순서를 거스르므로 처음부터 연속 함수가 될 수 없는데, 이것은 같은 불가능을 순서의 말로 다시 본 것입니다. 프로그램이 명세를 지키는지 증명하는 호어 논리⁠(Hoare logic)⁠도 이 벽에 부딪힙니다. '끝난다면 이 조건이 성립한다'는 부분 정확성⁠(partial correctness)⁠으로 읽으면 {참} C {거짓}은 'C는 어디서 시작해도 끝나지 않는다'는 뜻이라, 모든 삼중을 판정하는 알고리즘은 정지 문제를 풀어 버리기 때문입니다. 풀 수 있는 문제 안에서 '얼마나 빨리' 풀 수 있는지를 묻는 것이 P 대 NP 문제⁠(P versus NP problem)⁠입니다. 어떤 문자열을 출력하는 가장 짧은 프로그램의 길이, 곧 콜모고로프 복잡도⁠(Kolmogorov complexity)⁠도 계산할 수 없습니다. 짧은 프로그램부터 차례로 돌려 보는 방법은 영원히 도는 프로그램에서 막히고, 다른 어떤 방법으로도 안 된다는 것이 비슷한 자기 참조⁠(self-reference)⁠ 논증으로 증명되어 있습니다.

이 개념이 나오는 긴 글

집합론 무한에도 크기가 있다 자연수와 짝수는 어느 쪽이 많을까? 칸토어는 무한을 세는 법을 찾았고, 무한이 하나가 아님을 보였다. 계산 이론 기계가 풀 수 없는 문제 모든 수학 문제를 기계적으로 풀 수 있을까? 러셀의 역설에서 괴델과 튜링까지, 그 질문에 대한 답은 '아니오'였고, 그 증명이 컴퓨터를 낳았다. 계산언어학 말을 세는 기계 문법은 규칙일까, 확률일까? 파니니의 문법에서 촘스키의 위계, 섀넌의 영어 엔트로피, 오늘날의 언어 모델까지. 램지 이론 완전한 무질서는 없다 여섯 명이 모이면 서로 아는 세 사람이나 서로 모르는 세 사람이 반드시 있다. 충분히 크면 어디에나 질서가 숨어 있다는 이론과, 그것을 동전 던지기로 증명한 에르되시. 알고리즘과 복잡도 줄 세우기의 한계 카드 천 장을 가장 빨리 줄 세우는 방법은? 인구조사의 천공 카드에서 퀵정렬까지, 그리고 어떤 방법도 넘을 수 없는 n log n의 벽. 정보 이론과 압축 짧게 보내기 모스 부호는 왜 E를 점 하나로 보낼까? 섀넌의 엔트로피가 정한 압축의 한계와, 허프만 부호에서 JPEG까지 그 한계에 다가간 방법들. 타입 이론과 범주론 증명은 프로그램이다 러셀의 역설을 막으려던 '타입'이 프로그램의 실수를 막는 장치가 되었다. 명제를 타입으로, 증명을 프로그램으로 읽으면 둘이 규칙 하나하나까지 맞아떨어진다. 오늘날 수학자들은 그 사실로 컴퓨터에게 증명을 검사받는다. 수학의 오류 틀린 증명이 만든 수학 틀린 증명은 흔하다. 드물게, "정확히 어디가 틀렸는가"라는 물음이 새 분야를 낳는다. 코시의 합 정리와 균등 수렴, 라메의 증명과 아이디얼, 켐프의 사슬, 푸앵카레의 회수된 논문과 혼돈, 프레게의 법칙과 러셀의 편지, 보예보츠키와 증명 보조기까지. 오류는 대개 서로 다른 두 가지를 하나로 여긴 자리에 있었다. 불가능성 정리 불가능의 증명 각의 삼등분, 5차방정식의 근의 공식, 모든 파일을 줄이는 압축, 멈춤을 판정하는 프로그램, 공정한 투표 규칙. 없다는 것은 어떻게 증명할까? 서로 먼 분야의 불가능성 증명들은 거의 모두 불변량, 세기, 대각선이라는 세 가지 무기 가운데 하나를 쓴다. 압축과 과학 압축하는 것이 이해하는 것이다 튀코 브라헤가 20년 동안 적은 행성의 위치를 케플러는 법칙 세 줄로 줄였다. 짧게 적는 일과 이해하는 일은 정말 같은 일일까? 오컴의 면도날을 비트로 재는 법, 과적합을 압축의 실패로 읽는 법, 그리고 그 말이 정리인 곳과 철학인 곳.

이 개념 위에 세워진 것

이 개념을 언급하는 페이지

이 페이지가 가리키는 개념