====== 튜링 완전 ====== [[Alan Turing|Turing]] completeness. [[계산모델]]의 한 분류. 어떤 계산 모델이 [[튜링기계]]로 나타낼 수 있는 [[프로그램]]을 모두 나타낼 수 있고 그 역도 성립한다면 그 모델은 튜링 완전, 즉 튜링 기계와 동일한 능력을 가진다. 기본적으로 우리가 사용하는 사실상 모든 [[계산]]은 튜링 완전한 모델로 표현 가능하다고 볼 수 있다. 이보다 더 넓은 범위의 개념은 [[하이퍼계산]]이라 부르며 실제로 구현할 수 있으리라는 추측도 있긴 하지만 아직 현실적인 얘기는 아니다. ===== 튜링 완전한 모델들 ===== * [[튜링기계]] (정의에 따라) * [[타입없는람다대수]] 및 적절한 [[타입시스템]]을 가진 대부분의 [[람다대수]] 변종 ([[처치튜링명제]]에 따라) * 제한 없는 [[재작성체계]] * 우리가 일반적으로 사용하는 사실상 모든 일반목적 [[프로그래밍언어]]는 튜링 완전하다. 좀 더 정확하게는: * 제한 없는 조건부 [[GOTO]] 문과 (필요에 따라 그 크기를 임의로 키울 수 있는) [[메모리]]를 읽고 쓸 수 있는 모델은 튜링 완전하다. * GOTO 문을 제한 없는 [[while]] 문으로 바꿔도 튜링 완전하다. ("제한이 없다"는 말은 루프가 시작되기 전에 루프가 도는 횟수가 결정되거나 하면 안 된단 소리다.) * 많은 [[함수형프로그래밍언어]]는 람다 대수와 동형이다. * 많은 [[난해한프로그래밍언어]]는 위의 조건을 충족하지 않는데도 튜링 완전하게 설계되곤 한다. (이를테면 [[Muriel]] 같은 것) 따라서 이 동네에서는 튜링 완전하면서도 굉장히 예측 불허인 언어를 설계하는 것이 일반적이다. 그 밖에 보통 튜링 완전하다고 예상하기 쉽지 않은 것들: * [[Rule 110]]과 [[라이프게임]]을 포함한 각종 [[셀룰러오토마타]] * [[마인크래프트]] [[레드스톤]] 회로 (...) {{tag>전산학}}