3.21 튜링 완전성(Turing Completeness)의 정의와 판별 기준
1. 튜링 완전성의 정의
튜링 완전성(Turing Completeness)은 계산 체계(Computational System)가 튜링 기계와 동등한 계산 능력을 갖는다는 성질이다. 형식적으로, 계산 체계 S가 튜링 완전(Turing Complete)하다 함은, 임의의 튜링 기계 M에 대해 M의 동작을 S에서 시뮬레이션할 수 있음을 의미한다.
동등하게, S가 튜링 완전하다 함은 임의의 계산 가능 함수(Computable Function)를 S에서 계산할 수 있음을 의미한다. 처치-튜링 논제(Church-Turing Thesis)에 따르면 이는 직관적으로 “기계적으로 계산 가능한” 모든 함수를 S에서 계산할 수 있다는 것이다.
2. 튜링 완전성의 판별 기준
계산 체계 S의 튜링 완전성을 판별하기 위한 일반적 전략은 다음 중 하나를 증명하는 것이다:
2.1 기준 1: 보편 튜링 기계의 시뮬레이션
S에서 보편 튜링 기계(Universal Turing Machine, UTM)를 시뮬레이션할 수 있음을 보인다. UTM이 임의의 튜링 기계를 시뮬레이션할 수 있으므로, S가 UTM을 시뮬레이션할 수 있으면 S는 튜링 완전하다.
2.2 기준 2: 알려진 튜링 완전 체계의 시뮬레이션
S에서 이미 튜링 완전으로 알려진 다른 계산 체계(예: 람다 계산, 뮤 재귀 함수, 셀룰러 오토마타 규칙 110 등)를 시뮬레이션할 수 있음을 보인다.
2.3 기준 3: 최소 필요 조건
튜링 완전성에 필요한 최소한의 계산 능력을 확인한다. 일반적으로 다음의 조건이 필요하다:
- 조건부 분기(Conditional Branching): 데이터의 값에 따라 실행 경로를 선택하는 능력.
- 임의 반복(Arbitrary Looping): 종료 조건이 충족될 때까지 명령을 반복 실행하는 능력.
- 무한 메모리(Unbounded Memory): 원리적으로 제한 없는 양의 데이터를 저장하고 접근하는 능력.
이 세 조건은 필요 조건이지만 충분 조건으로 공식 증명된 것은 아니며, 정확한 충분 조건의 특성화는 구체적 체계에 따라 다르다.
3. 튜링 완전한 계산 체계의 예
3.1 프로그래밍 언어
현대의 모든 범용 프로그래밍 언어(General-Purpose Programming Language)는 튜링 완전하다:
- C, C++, Java, Python, JavaScript: 조건문(if-else), 반복문(while, for), 동적 메모리 할당을 제공한다.
- Haskell, ML: 재귀(Recursion)와 고차 함수(Higher-Order Function)를 통해 임의의 계산 가능 함수를 표현한다.
- Lisp: 람다 계산(Lambda Calculus)의 직접적 구현이며, 처치가 증명한 바에 따라 튜링 완전하다.
- Prolog: 호른 절(Horn Clause)과 SLD 해소(SLD Resolution)에 기반하며, 튜링 완전하다.
3.2 추상적 계산 모델
- 람다 계산(Lambda Calculus): 처치(Alonzo Church)가 1936년에 제안한 함수적 계산 모델. 튜링 기계와 동치임이 증명되었다.
- 뮤 재귀 함수(Mu-Recursive Functions): 괴델(Kurt Gödel)과 헤르브란트(Jacques Herbrand)에 의해 정의된 재귀 함수 클래스.
- 포스트 생산 체계(Post Production System): 포스트(Emil Post)가 제안한 문자열 재작성 체계.
- 마르코프 알고리즘(Markov Algorithm): 마르코프(Andrey Markov)가 제안한 문자열 치환 체계.
3.3 의외의 튜링 완전 체계
튜링 완전성이 의도되지 않았음에도 결과적으로 튜링 완전한 것으로 밝혀진 체계:
- 셀룰러 오토마타 규칙 110(Rule 110): 쿡(Matthew Cook)이 2004년에 1차원 셀룰러 오토마타 규칙 110이 튜링 완전함을 증명하였다.
- 콘웨이의 생명 게임(Conway’s Game of Life): 2차원 셀룰러 오토마타인 생명 게임이 튜링 완전함이 증명되었다.
- SQL: 공통 테이블 식(Common Table Expression, CTE)을 포함하는 SQL은 튜링 완전하다.
- CSS: 특정 조건 하에서 CSS가 튜링 완전함이 보여졌다.
- 마인크래프트의 레드스톤(Redstone): 게임 내 논리 회로 시스템이 튜링 완전하다.
4. 튜링 완전하지 않은 체계
다음의 계산 체계는 튜링 완전하지 않다:
- 유한 오토마타(Finite Automaton): 유한 상태만을 가지므로 무한 메모리가 부재하다.
- 푸시다운 오토마타(Pushdown Automaton): 스택 구조의 메모리를 가지지만 랜덤 접근이 불가하다.
- 정규 표현식(Regular Expression): 유한 오토마타와 동등한 표현력을 가진다(역참조 없는 경우).
- 원시 재귀 함수(Primitive Recursive Functions): 아커만 함수(Ackermann Function)를 계산할 수 없다.
- 총 함수형 프로그래밍(Total Functional Programming): 모든 프로그램이 정지하도록 보장하는 제한적 프로그래밍 패러다임. 정지하지 않는 계산을 표현할 수 없으므로 튜링 완전하지 않다.
5. 튜링 완전성과 정지 문제의 관계
튜링 완전성의 중요한 귀결은 정지 문제의 결정 불가능성이다. 튜링 완전한 체계에서는 프로그램이 주어진 입력에 대해 종료하는지를 일반적으로 판정할 수 없다. 이 성질은 튜링 완전성의 “대가“이다: 계산 능력의 극대화는 프로그램 분석의 근본적 한계를 수반한다.
이 때문에, 의도적으로 튜링 완전성을 제한하여 정지 보장(Termination Guarantee)을 확보하는 제한적 계산 체계가 설계되기도 한다. 의존적 유형 이론(Dependent Type Theory)에 기반한 증명 보조기(Proof Assistant)인 Coq, Agda 등은 모든 함수의 정지를 보장하는 총 함수형(Total Functional) 체계이며, 따라서 튜링 완전하지 않다.
6. 인공지능에서의 튜링 완전성
현대 인공 신경망의 튜링 완전성은 중요한 이론적 물음이다.
재귀 신경망(Recurrent Neural Network, RNN): 시겔만과 손태그(Siegelmann & Sontag, 1995)는 유한 정밀도의 가중치를 가진 RNN이 유한 오토마타와 동등하지만, 실수(Real-Valued) 가중치를 허용하면 튜링 완전함을 증명하였다.
트랜스포머(Transformer): 유한 정밀도의 트랜스포머는 엄밀하게 튜링 완전하지 않으나, 외부 메모리나 스크래치패드(Scratchpad)를 추가하면 튜링 완전성을 달성할 수 있다.
이 결과들은 인공 신경망의 이론적 계산 능력과 실용적 계산 능력 사이의 간극을 보여주며, 아키텍처 설계에서의 표현력(Expressiveness)과 효율성(Efficiency)의 균형 문제를 제기한다.