Turing-completeness는 한 가지만 말합니다. Turing Machine으로 모델링 할 수있는 계산을 해당 모델로 모델링 할 수있는 경우 계산 모델은 Turing-complete입니다.
Turing Machine이 모델링 할 수있는 계산은 무엇입니까? 무엇보다도 Alan Turing과 그의 모든 동료는 자연수의 함수에만 관심이있었습니다. 따라서 Turing Machine (및 λ-calculus, SK 결합기 미적분, μ 재귀 함수 등)은 자연수에 대한 함수의 계산 가능성에 대해서만 이야기합니다. 자연수에 대한 함수에 대해 이야기하고 있지 않다면 Turing-completeness의 개념은 의미가 없으며 단순히 적용 할 수 없습니다.
그러나 많은 흥미로운 것들을 자연수로 인코딩 할 수 있습니다. 문자열을 자연수로, 그래프를 자연수로, 부울을 자연수로 인코딩 할 수 있습니다. 튜링 머신 을 자연수로 인코딩 하여 튜링 머신에 대해 이야기하는 튜링 머신을 만들 수 있습니다!
물론 자연수의 모든 함수가 계산 가능한 것은 아닙니다. 튜링 머신은 자연수에 대한 일부 함수 만 계산할 수 있으며 λ- 미적분은 자연수에 대한 일부 함수 만 계산할 수 있으며 SK 조합기 미적분은 자연수에 대한 일부 함수 만 계산할 수 있습니다 . 놀랍게도 (아니면) 모든 계산 모델 (실제 우주에서 실제로 실현 가능)은 자연수 (적어도 지금까지 찾은 모든 모델에 대해)에서 동일한 기능을 계산할 수 있습니다 . [참고 : 분명히, 거기에 약한 계산 모델은,하지만 우리는 아직 하나 발견하지 않았습니다 강해실수 또는 시간 여행을 사용하는 모델과 같이 실제 우주와 명백하게 호환되지 않는 일부 제외.]
이 사실은 많은 다른 모델을 오랫동안 검색 한 후에도 매번 정확히 동일한 기능을 계산할 수 있다는 것이 Church-Turing-Thesis의 기초라는 것을 발견했습니다. 계산 모델도 똑같이 강력하며, 모두 "계산 가능"이라는 의미의 "이상적인"개념을 포착합니다. (또한 CTT에는 더 철학적 인 측면이 있습니다. 즉 , 알고리즘을 따르는 사람 은 TM이 계산할 수있는 것과 정확히 동일한 기능을 계산할 수 있다는 것입니다.)
그러나 이것에 대해 아무것도 말하지 않습니다.
- 다양한 모델의 효율성
- 그들이 사용 하는 것이 얼마나 편리 합니까
- 어떤 다른 그들이 할 수있는 외에 자연 번호에 컴퓨팅 기능
그리고 그 계산 (및 프로그래밍 언어)의 서로 다른 모델의 차이점이 역할을하는 곳을 정확하게이다.
O(sizearray)O(size2array)sizearraysizearray
다양한 편의를위한 예로서, 고급 언어로 작성된 코드, 어셈블리로 작성된 코드 및 동일한 문제를 해결하기위한 TM 설명을 비교할 수 있습니다.
그리고 전등 스위치는 세 번째 종류의 차이의 예입니다. 일부 모델은 자연수의 기능이 아니므로 Turing-completeness와는 아무런 관련이 없습니다.
특정 질문에 대답하려면 다음을 수행하십시오.
그러나 할 수 있는 튜링 완전한 언어로 작성된 프로그램은 다른 재 작성?
프로그램이 자연수에 대한 튜링 계산 기능을 계산하는 경우에만 해당됩니다. 그럼에도 불구하고 복잡한 인코딩이 필요할 수 있습니다. 예를 들어, λ- 미적분은 자연 수조차 갖지 않으며 함수를 사용하여 인코딩해야합니다 (함수가 λ- 미적분이 가진 유일한 것이므로).
이 입력 및 출력 인코딩은 알고리즘을 표현할 수있는 것처럼 매우 복잡 할 수 있습니다. 따라서 모든 프로그램 을 다시 작성할 수는 있지만 다시 작성된 프로그램은 훨씬 더 복잡하고, 더 크며, 더 많은 메모리를 사용하고, 더 느릴 수 있습니다.
내 어셈블리에 LIGHTBUTTON opcode가 있으면 어떻게합니까? 전구가 없으면 시스템 (언어)에서 해당 언어를 실제로 모방 할 수 없습니다.
전구는 자연수에 대한 튜링 계산 기능이 아닙니다. 실제로, 전구는 함수도 아니고 계산도 아닙니다. 전구를 켜고 끄는 것은 I / O 부작용입니다. Turing Machine은 I / O 부작용을 모델링하지 않으며 Turing-completes는 관련이 없습니다.
임의의 실수.
튜링-완전성은 자연수에 대한 계산 가능한 함수 만 다루며 실수와는 관련이 없습니다.
Turing-completeness는 두 가지 이유로 당신과 같은 질문에 관해서는 그리 흥미롭지 않습니다.
- 그것은 매우 높은 장애물이 아닙니다. 당신이되고 필요로하는
IF
, GOTO
, WHILE
, 단일 정수 변수 (변수를 가정이 임의의 큰 정수를 저장할 수). 또는 재귀. 많은 것들과 많은 것들이 Turing-complete입니다. 카드 게임 Magic : The Gathering 은 Turing-complete입니다. CSS3은 Turing-complete입니다. sendmail
구성 파일은 튜링 완료됩니다. Intel x86 MMU는 Turing-complete입니다. Intel x86 MOV
명령어는 Turing-complete입니다. PowerPoint 애니메이션이 튜링 완료되었습니다. Excel (스크립팅없이 공식 만 사용)은 Turing-complete입니다. BGP 라우팅 프로토콜이 Turing-complete입니다. sed
튜링 완료입니다. 아파치 mod_rewrite
규칙은 Turing-complete입니다. " (실수로 또는 놀랍게도) 튜링 완료를 위한 Google거의 모든 것이 Turing-complete이면 Turing-complete가 흥미로운 속성이되는 것을 멈 춥니 다.
- 실제로 유용 할 필요는 없습니다. 유용한 많은 것들이 Turing-complete 가 아닙니다 . 버전 3 이전의 CSS는 Turing-complete 가 아니며 CSS3 가 실제로 아무도 사용되지 않는다는 사실입니다. 1999 년 이전의 SQL은 Turing-complete가 아니었지만 그 당시에도 매우 유용했습니다. 추가 라이브러리 가없는 C 프로그래밍 언어 는 Turing-complete 인 것처럼 보이지 않습니다 . 의존적으로 유형이 지정된 언어는 튜링 완료가 아닌 정의에 따라 다소 차이가 있지만 운영 체제, 웹 서버 및 게임을 언어로 작성할 수 있습니다.
Idris의 저자 인 Edwin Brady는 "Tetris-complete"라는 용어를 사용하여 이러한 측면에 대해 이야기합니다. 테트리스가 완전하다는 것은 엄격하게 정의되어 있지 않지만 ( "테트리스를 구현하는 데 사용될 수있는 명백한 것"외에), 수준 높고 표현력이 뛰어나서 게임을 작성할 수있을 정도로 미친 듯이 표현할 수 있습니다. 외부 세계 (입력 및 출력)와 상호 작용하고 부작용을 표현할 수 있으며 이벤트 루프를 작성할 수 있으며 반응 형, 비동기 및 동시 프로그래밍을 표현할 수 있으며 운영 체제와 상호 작용할 수 있습니다. 외국 라이브러리와의 상호 작용 (즉, C 코드로 호출하고 호출 할 수 있음) 등. 이것들은 Turing-completeness보다 범용 프로그래밍 언어의 훨씬 흥미로운 기능입니다.
흥미로운 질문에 대한 내 답변을 찾을 수 있습니다 .이 질문은 다른 질문에 답변하더라도 동일한 요점에 닿습니다.