계산 가능성 이론

계산 가능성 이론(計算可能性理論, 영어: computability theory) 또는 재귀 이론(再歸理論, 영어: recursion theory)은 수학기초론의 중요한 분야이자 컴퓨터 과학에서는 계산 이론의 한 갈래이다.
계산 가능성 이론의 기초는 가산 집합 상에서 함수의 해를 찾는 문제와 관련이 있다. 1930년대 불완전성 정리와 함께 람다 대수와 튜링 기계라는 계산 모형이 만들어지면서, 어떤 집합이 효율적으로 계산 가능한지의 문제는 실질적으로 그 집합을 효율적으로 계산해 내는 함수를 만들어 내는 것과 같은 일이 되었다. 계산 가능성 이론의 초기 성과는 이들 집합을 계산적으로 동치인 것들로 묶어 위계로 분류한 것이다. 수학적으로 유한히 정의된 함수를 계산 가능성에 따라 분류했을 때 어떤 함수의 계산 가능성 문제를 다른 함수(다른 함수들)의 문제로 환원할 수 있다는 것을 보임으로써, 굳이 알고리즘 자체를 증명에 끌어들이지 않고도 계산 가능성을 증명할 수 있는 것이다. 이에 따라 대안적인 공리계를 모색하기 위한 이론적 토대가 마련되었고, 수리논리학과 증명론에서 직관주의가 입지를 공고히 했으며, 형 이론과 고차 논리, 자연 연역, 헤이팅 대수의 비약적 발전에 영향을 주었다.
계산 복잡도 이론에서는 계산 가능한 집합을 그 함수의 해를 찾는 효율적인 알고리즘에 의해 소모되는 시공간적 자원의 추세를 토대로 분류한다. 이에 따라 계산 복잡도 이론과 계산 가능성 이론 중 어느 쪽이 상위의 개념인지에 관해 다소 논쟁이 있다.

계산모형의 계산능력

앞서 말한 계산 모형들이 어떤 종류의 형식 언어를 표현할 수 있는지에 따라 각 모형의 한계를 알 수 있다.

유한상태기계의 계산능력

컴퓨터 과학자들은 유한 상태 기계 모형을 만족하는 기계가 받아들일 수 있는 언어를 정규 언어라 한다. 유한 상태 기계에서 가능한 상태는 유한개이다. 따라서 어떤 언어가 정규 언어가 아니라는 것을 보이기 위해서는 그 언어를 표현하기 위해 무한개의 상태가 필요하다는 것을 보여야 한다.
예를 들어 a 와 b 를 같은 개수만큼 포함하는 문자열들의 집합을 생각해 보자. 이 언어가 유한 상태 기계 모형으로 다룰 수 없다는 것을 보이기 위해 그런 기계  이 있다고 하자.  은 유한하므로 상태의 수를  개라 할 수 있다. 한편 앞에 a가  개, 뒤에 b가  개 있는 문자열 를 생각하자.
기계  이 문자열  를 읽어 들이면 문자열 'a'를 읽을 때 적어도 한 상태를 두 번 거치게 된다. 'a'가  개 있고 상태가  개 있으므로 비둘기집 원리를 적용할 수 있기 때문이다. 이 상태를  라 하자. 그리고 상태  가 처음 나온 때로부터 두 번째 등장할 때까지 읽은 'a'의 개수를  라 하자. 즉,  에서 d 만큼의 'a'를 받아들였을 때 다시  상태가 된다는 것이고 따라서 기계가  개의 'a'문자를 읽든  개의 'a'를 읽든 최종에는 같은 상태가 된다. 이는 곧 기계가 문자열  를 받아들인다면,  개의 'a'와  개의 'b'로 구성된 문자열도 받아들인다는 것이다. 이것은  이 'a'와 'b'가 같은 개수가 있는 문자열만 받아들인다는 데서 모순이 된다.
따라서 이 언어는 어떤 유한 상태 기계로도 표현할 수 없으며 따라서 정규 언어가 아니다. 더 일반적인 형태로 보이기 위해서 정규 언어에 대한 펌핑 렘마를 쓰는데, 많은 언어들이 유한 상태 기계로 나타낼 수 없다는 것을 보이는 데 쓰인다.
아마 많은 사람들이 이 결과를 의아하게 생각할 것이다. 이러한 언어를 인식하는 프로그램을 컴퓨터로 작성하는 것이 매우 쉽기 때문이다. 하지만 위에서 데스크톱 PC 등 현존하는 모든 컴퓨터들이 유한 상태 기계라고 말하였다. 이것은 컴퓨터에도 엄연히 컴퓨터의 메모리 용량 같은 제한이 존재하기 때문이다. 문자열의 길이가 길어지면 문자의 개수를 세는 데 컴퓨터의 메모리 용량을 다 쓸 것이고, 결국 바닥나 오버플로우할 것이다. 아무리 많은 문자열을 인식할 수 있다고 해도 결국 인식할 수 없는 문자열이 있다. 이러한 사실들은 정규 언어가 어떻게 데스크톱 PC 등에 적용되는지를 이해할 수 있게 해 준다.

내리누름 오토마타의 계산능력

컴퓨터 과학자들은 내리누름 오토마타로 받아들일 수 있는 언어를 문맥 자유 언어라 정의한다. 이 언어는 문맥 자유 문법으로도 표현할 수 있다. 앞에서 'a'와 'b'가 같은 개수만큼 있는 언어는 정규 언어가 아니라고 하였는데, 내리누름 오토마타로는 표현할 수 있다. 일반적으로 내리누름 오토마타가 유한 상태 기계처럼 동작할 수 있고 따라서 정규 언어를 받아들인다. 그러므로 이 계산 모형은 유한 상태 기계보다 더 강력하다.
하지만 내리누름 오토마타로도 표현할 수 없는 언어가 있다. 정규 언어에서와 비슷하게 찾을 수 있는데, 예로는 소수의 집합이 있다(상세히 설명하지는 않겠다.) 정규 언어와 비슷하게, 문맥 자유 언어에 대한 펌핑 렘마도 있다.

정지 문제

컴퓨터 과학에서 가장 중요한 문제들 중 하나인 정지 문제는 '튜링 기계와 입력이 주어져 있을 때 튜링 기계가 이 입력에 대해 유한시간 내에 계산을 끝내고 멈출 것인가 아니면 영원히 멈추지 않을 것인가'를 판별하는 문제이다. 평소에 컴퓨터가 어떻게 다루어지는가와, 계산 가능성 이론에 대한 핵심적인 부분을 다루고 있다.
이것은 소수의 개수나 회문과 같은 단순한 문제와는 달리 튜링 기계가 다른 튜링 기계에 대한 물음에 답할 수 있도록 해야한다. 이런 동작을 하는 튜링 기계를 설계하는 것이 불가능하다는 것을 보일 수 있다. (정지 문제 참고)
사실 주어진 프로그램이 어떤 입력에 대해 정지하는지를 아는 일반적인 방법은 단순히 작동시켜보고 멈추는지를 보는 수밖에 없다. 만일 멈춘다면 그 기계가 멈춘다는 것을 알 수 있다. 하지만 멈추지 않는다면 이 기계가 언젠가 멈출지 아닐지 알 수 없다. 정지 언어(튜링 기계와 그 기계를 멈추는 입력의 모든 순서쌍 집합)는 순환 언어가 아니다. 따라서 정지 문제는 계산 불가능 혹은 결정 불가능하다.
정지 문제의 확장으로 라이스의 정리가 있는데, 이 정리에 따르면 어떤 튜링 기계가 수락하는 언어가 자명하지 않은 성질을 가지는지 아닌지는 결정 불가능하다.

순환 언어를 넘어서

정지 문제에 대응되는 언어는 순환 열거 언어이다. 작동시켰을 때 튜링 기계가 그 입력에 대해 멈춘다면 기계가 멈춘다는 사실을 그 시점에서 알게 되기 때문이다. 그러나 순환 열거 언어조차 아닌 언어도 존재하며, 그 예를 들 수 있다.
순환 열거 언어가 아닌 언어로는 정지 언어의 여집합(튜링 기계와 그 기계를 멈추지 않는 입력의 모든 순서쌍 집합)이 있다. 이 언어가 순환 열거 언어가 아니라는 것을 보일 것이다. 멈추는 튜링 기계를 입력으로 받으면 영원히 멈추지 않고 나머지 경우에는 항상 멈추는 튜링 기계  이 있다고 가정하자. 그러면 시분할 기법을 이용하여 튜링 기계를 입력으로 하여  을 동작시키면서 동시에 입력으로 받은 기계를 동작시키는 기계  을 만들 수 있다. 만약 입력된 튜링 기계가 멈추지 않는다면  이 멈추고 만일 입력된 튜링 기계가 멈춘다면  에서 입력으로 받은 기계를 동작시키는 부분이 멈출 것이다. 즉,  의 두 스레드 중 적어도 하나는 멈춘다. 따라서  은 정지 문제를 판정할 수 있는 기계이며 이것은 정지 문제가 결정 불가능하다는 데서 모순이다. 따라서 정지 언어의 여집합은 순환 열거 언어가 아니다.

가상의 계산모형

처치-튜링 명제를 통해, 튜링 기계보다 더 강력하면서 논리적인 모형은 없다고 추측할 수 있다. 그러나 비논리적인 모형은 생각할 수 있는데, 여기서 몇몇 모형을 살펴볼 것이다. 컴퓨터 과학자들은 많은 종류의 초계산기(hypercomputer)를 생각해냈다. 재귀 이론은 수리논리학의 한 갈래로 이런 계산 모형들을 엄밀하게 다룬다.

신탁 기계

신탁 기계는 결정 불가능한 문제를 풀어내는 특정한 '신탁'에 접속할 수 있다. 예를 들어 '정지 신탁'을 가진 튜링 기계는 임의의 튜링 기계와 입력에 대해 정지 문제를 바로 판정할 수 있다.

초월계산의 한계

이런 기계들이 기존의 한계를 벗어난 것처럼 보여도 다시 각각의 한계를 찾을 수 있다. 이런 기계들이 튜링 기계에 대한 정지 문제를 판정할 수는 있지만 그 기계들 사이의 정지 문제는 결정 불가능하다. 예를 들어 신탁 기계는 임의의 신탁 기계가 멈추는지 아닌지를 판정할 수 없다.

계산가능성 이론의 역사

계산가능성 이론은 일차 논리에 그 뿌리를 두고 있으며, 정지 문제 및 재귀와 관련된 많은 문제들은 불완전성 정리와 밀접하게 연관되어 있다. 다비트 힐베르트와 쿠르트 괴델은 일차논리의 기초를 쌓았다. 계산가능성 이론에 앞서 알론조 처치와 스티븐 클레이니는 람다 셈법을 연구했다. 앨런 튜링은 현대 전산학의 아버지라 불릴 수 있을 정도로 계산 가능성 이론과 복잡도 이론의 중대한 기틀을 다졌다. 튜링의 가장 유명한 업적은 튜링 기계를 제안하여 판정 문제를 해결한 것이다.