Tính đầy đủ của Turing chỉ nói lên một điều và một điều duy nhất: một mô hình tính toán là Turing-Complete, nếu bất kỳ tính toán nào có thể được mô hình hóa bằng Máy Turing cũng có thể được mô hình hóa theo mô hình đó.
Vì vậy, các tính toán mà Turing Machine có thể mô hình là gì? Chà, đầu tiên và quan trọng nhất, Alan Turing và tất cả các đồng nghiệp của mình chỉ quan tâm đến các chức năng trên các số tự nhiên. Vì vậy, Máy Turing (và tính toán, tính toán tổ hợp SK, hàm đệ quy…, hàm) chỉ nói về khả năng tính toán của các hàm trên các số tự nhiên. Nếu bạn không nói về một hàm trên các số tự nhiên, thì khái niệm Turing-đầy đủ thậm chí không có ý nghĩa, nó chỉ đơn giản là không áp dụng được.
Tuy nhiên, lưu ý rằng chúng ta có thể mã hóa nhiều thứ thú vị dưới dạng số tự nhiên. Chúng ta có thể mã hóa chuỗi dưới dạng số tự nhiên, chúng ta có thể mã hóa biểu đồ dưới dạng số tự nhiên, chúng ta có thể mã hóa booleans dưới dạng số tự nhiên. Chúng ta có thể mã hóa Máy Turing thành số tự nhiên, cho phép chúng ta tạo Máy Turing nói về Máy Turing!
Và, tất nhiên, không phải tất cả các hàm trên số tự nhiên đều có thể tính toán được. Máy Turing chỉ có thể tính toán một số hàm trên số tự nhiên, phép tính chỉ có thể tính toán một số hàm trên số tự nhiên, phép tính tổ hợp SK chỉ có thể tính toán một số hàm trên số tự nhiên, đấm. Đáng ngạc nhiên (hoặc không), hóa ra mọi mô hình tính toán (thực sự có thể thực hiện được trong vũ trụ vật lý của chúng ta) có thể tính toán các hàm giống nhau trên các số tự nhiên (ít nhất là cho tất cả các mô hình mà chúng ta đã tìm thấy cho đến nay). [Lưu ý: rõ ràng, có những mô hình tính toán yếu hơn , nhưng chúng tôi chưa tìm thấy mô hình nào mạnh hơn, ngoại trừ một số rõ ràng không tương thích với vũ trụ vật lý của chúng ta, chẳng hạn như các mô hình sử dụng số thực hoặc du hành thời gian.]
Thực tế này, sau một thời gian dài tìm kiếm rất nhiều mô hình khác nhau, chúng tôi thấy rằng, mỗi lần, chúng có thể tính toán chính xác các chức năng giống nhau, là cơ sở cho Luận án Giáo hội, nói (đại khái) rằng tất cả các mô hình tính toán đều mạnh mẽ như nhau, và tất cả chúng đều nắm bắt khái niệm "lý tưởng" về ý nghĩa của nó là "tính toán". (Ngoài ra còn có khía cạnh triết học thứ hai, mang tính triết học hơn, đó là con người theo thuật toán cũng có thể tính toán chính xác các chức năng tương tự mà TM có thể tính toán và không còn nữa.)
Tuy nhiên , không ai trong số này nói bất cứ điều gì về
- hiệu quả của các mô hình khác nhau như thế nào
- chúng tiện lợi như thế nào khi sử dụng
- những gì khác họ có thể làm bên cạnh các chức năng tính toán trên các số tự nhiên
Và đó chính xác là nơi mà sự khác biệt giữa các mô hình tính toán khác nhau (và ngôn ngữ lập trình) phát huy tác dụng.
Như một ví dụ về hiệu suất khác nhau, cả Máy truy cập ngẫu nhiên và Máy Turing đều có thể sao chép một mảng. Nhưng, RAM cần các hoạt động để thực hiện điều đó, trong khi TM cần các hoạt động , vì nó cần bỏ qua các phần tử của mảng để sao chép từng phần tử và có các phần tử để sao chép.O ( s i z e 2 một r r một y ) s i z e một r r một y s i z e một r r một yO ( s i zea r r a y)O ( s i ze2a r r a y)s i zea r r a ys i zea r r a y
Để làm ví dụ cho sự thuận tiện khác nhau, bạn chỉ có thể so sánh mã được viết bằng ngôn ngữ cấp cao, mã được viết theo cụm và mô tả về TM để giải quyết cùng một vấn đề.
Và công tắc đèn của bạn là một ví dụ về loại khác biệt thứ ba, những thứ mà một số mô hình có thể làm không phải là chức năng trên các số tự nhiên và do đó không liên quan gì đến Turing-đầy đủ.
Để trả lời các câu hỏi cụ thể của bạn:
Nhưng bất kỳ chương trình nào được viết bằng ngôn ngữ hoàn chỉnh Turing có thể được viết lại bằng ngôn ngữ khác không?
Không. Chỉ khi chương trình tính toán một hàm tính toán Turing trên các số tự nhiên. Và thậm chí sau đó, nó có thể cần một mã hóa phức tạp. Ví dụ, calcul-compus thậm chí không có số tự nhiên, chúng cần được mã hóa bằng các hàm (vì các hàm là thứ duy nhất calcul-compus có).
Mã hóa đầu vào và đầu ra này có thể rất phức tạp, vì có thể diễn tả thuật toán. Vì vậy, trong khi sự thật là bất kỳ chương trình nào cũng có thể được viết lại, chương trình viết lại có thể phức tạp hơn nhiều, lớn hơn nhiều, sử dụng nhiều bộ nhớ hơn và chậm hơn nhiều.
Điều gì xảy ra nếu hội của tôi có opcode LIGHTBUTTON? Tôi thực sự không thể mô phỏng ngôn ngữ đó trên một hệ thống (ngôn ngữ) mà không có bóng đèn.
Một bóng đèn không phải là chức năng tính toán Turing trên các số tự nhiên. Thực sự, một bóng đèn không phải là một chức năng cũng không phải là một tính toán. Bật và tắt bóng đèn là hiệu ứng phụ I / O. Máy Turing không mô hình hóa các hiệu ứng phụ I / O và Turing-đầy đủ không liên quan đến chúng.
Trên các số thực tùy ý.
Tính đầy đủ của Turing chỉ liên quan đến các hàm tính toán trên các số tự nhiên, nó không liên quan đến các số thực.
Turing-đầy đủ đơn giản là không thú vị khi nói đến câu hỏi như của bạn vì hai lý do:
- Nó không phải là một trở ngại rất cao. Tất cả bạn cần là
IF
, GOTO
, WHILE
, và một biến số nguyên đơn (giả định các biến có thể giữ nguyên tùy tiện lớn). Hoặc, đệ quy. Rất nhiều, rất nhiều và rất nhiều thứ đã hoàn thành. Trò chơi bài Magic: The Gathering đã hoàn thành. CSS3 đã hoàn tất. Các sendmail
tập tin cấu hình là Turing-hoàn thành. Intel x86 MMU đã hoàn thiện. MOV
Hướng dẫn Intel x86 là Turing-Complete. Hoạt hình PowerPoint là Turing-Complete. Excel (không có tập lệnh, chỉ sử dụng công thức) là Turing-Complete. Giao thức định tuyến BGP là Turing-Complete. sed
là Turing-hoàn thành. Các mod_rewrite
quy tắc của Apache là Turing-Complete. Google cho " (vô tình HOẶC đáng ngạc nhiên) hoàn thành"để tìm một số ví dụ thú vị khác. Nếu hầu hết mọi thứ là Turing-Complete, việc Turing-Complete dừng lại là một tài sản thú vị.
- Nó không thực sự cần thiết để có ích. Rất nhiều thứ hữu ích không phải là Turing-Complete. CSS trước khi phiên bản 3 không phải là Turing-đầy đủ (và thực tế là CSS3 là không thực sự được sử dụng bởi bất cứ ai). SQL trước năm 1999 chưa hoàn thành Turing, tuy nhiên, nó cực kỳ hữu ích ngay cả khi đó. Ngôn ngữ lập trình C không có thư viện bổ sung dường như không hoàn chỉnh . Các ngôn ngữ được gõ phụ thuộc, ít nhiều theo định nghĩa, không hoàn thành Turing, tuy nhiên, bạn có thể viết các hệ điều hành, máy chủ web và trò chơi trong đó.
Edwin Brady, tác giả của Idris, sử dụng thuật ngữ "Tetris-Complete" để nói về một số khía cạnh này. Hoàn thành Tetris không được định nghĩa chặt chẽ (khác với "rõ ràng" có thể được sử dụng để thực hiện Tetris "), nhưng nó bao gồm những thứ như đủ cấp độ cao và đủ biểu cảm để bạn có thể viết một trò chơi mà không bị điên, có thể tương tác với thế giới bên ngoài (đầu vào và đầu ra), có thể thể hiện tác dụng phụ, có thể viết một vòng lặp sự kiện, có thể thể hiện phản ứng, không đồng bộ và lập trình đồng thời, có thể tương tác với hệ điều hành, có thể tương tác với hệ điều hành, có thể tương tác với hệ điều hành, có thể để tương tác với các thư viện nước ngoài (nói cách khác: có thể gọi và được gọi bằng mã C), v.v. Đó là những tính năng thú vị hơn nhiều của ngôn ngữ lập trình mục đích chung so với tính hoàn chỉnh của Turing.
Bạn có thể tìm thấy câu trả lời của tôi cho câu hỏi mà bạn liên kết thú vị, nó chạm vào một số điểm giống nhau mặc dù nó trả lời một câu hỏi khác.