Có một định nghĩa rõ ràng về các máy tính có thể tính toán được trên các mô hình tính toán không hoàn chỉnh?


9

Đây là phần tiếp theo của một câu hỏi khác ở đây và tôi hy vọng nó không quá triết lý. Như Raphael đã chỉ ra trong một nhận xét về câu hỏi trước đây của tôi, tôi thực sự không có định nghĩa về "tính toán", nhưng theo một số bài báo tôi đọc, định nghĩa cũng không thực sự rõ ràng khi nói về các mô hình tính toán yếu hơn so với Turing máy vì mã hóa đầu vào và đầu ra.

Định nghĩa điển hình của Turing tính toán như sau:

Định nghĩa 1: Một chức năng được gọi là Turing tính toán khi và chỉ khi có một máy Turing M mà tính f sử dụng một mã hóa phù hợp các số tự nhiên như dây đàn.f:NkNMf

Các định nghĩa khác nhau về chính xác mã hóa phù hợp là gì, nhưng hầu hết đề cập đến mã hóa nhị phân , mã hóa đơn nguyên hoặc mã hóa thập phânmã hóa cố định và phù hợp. Cũng có thể chỉ ra rằng việc sửa một mã hóa là cần thiết cho định nghĩa tính toán tính toán. Nhưng điều gì làm cho mã hóa nhị phân của các số tự nhiên trở nên đặc biệt để chúng ta có thể axiomatize nó như một mã hóa phù hợp? Có lẽ bởi vì nó phù hợp với khái niệm trực quan về khả năng tính toán có nghĩa là trùng hợp .

Bây giờ nếu chúng ta nhìn vào các mô hình tính toán yếu hơn máy turing thì sao? Ví dụ: chúng ta hãy xem xét tập hợp của các máy xử lý "bị tê liệt" với bảng chữ cái { 0 , 1 } chỉ có thể di chuyển sang bên phải và một định nghĩa về tính toán tính toán bị tê liệt phù hợp với khả năng tính toán của tính năng bảo mật:Mc{0,1}

Định nghĩa 2: Hàm được gọi là turing turing có thể tính toán hoặc tính toán được trong M c iff có một máy turing bị tê liệt M tính toán f sử dụng mã hóa phù hợp các số tự nhiên dưới dạng chuỗi.f:NkNMcMf

Nếu chúng ta định nghĩa "mã hóa phù hợp" là "mã hóa nhị phân", thì hàm không tính toán trong M c . Nếu chúng ta axiomatize "mã hóa phù hợp" là "mã hóa đơn nguyên", thì f thể tính toán được trong M c . Điều này có vẻ khó xử khi thực tế là mọi người có thể sửa một trong vô số nhiều mã hóa trực quan theo ý muốn. Cần phải rõ ràng nếu một mô hình tính toán có thể tính ff:NN,nn+1Mcf Mcf hoặc không phải không đề cập đến một số mã hóa cụ thể - ít nhất tôi chưa từng thấy ai đề cập đến việc mã hóa nào được sử dụng khi nói rằng "các chương trình vòng lặp yếu hơn các máy turing".


Sau phần giới thiệu này, cuối cùng tôi cũng có thể diễn đạt câu hỏi của mình: Làm thế nào người ta định nghĩa "mã hóa phù hợp" và "tính toán" cho các mô hình tính toán tùy ý không trùng với khái niệm trực quan về tính toán? Đây có phải là trong khuôn khổ của tính toán turing?

Chỉnh sửa: Tôi rút ngắn phần giới thiệu, nó không thêm vào câu hỏi.

Câu trả lời:


6

Một số thực tế cơ bản mà bạn đang thiếu ở đây là tất cả các mã hóa mà bạn đề cập đều tương đương từ góc độ tính toán: có một hàm tính toán ánh xạ mã hóa nhị phân của một số sang mã hóa đơn nguyên của nó, hoặc ngược lại. Do đó, để xác định khả năng tính toán, việc bạn chọn mã hóa nào không quan trọng. Chỉ cần sửa mã hóa yêu thích của bạn.

Computability là cốt lõi của nó là một tài sản của các chức năng chuỗi . Khi bạn xác định khả năng tính toán trong bất kỳ miền nào khác, bạn phải sửa mã hóa. Trong thực tế, tất cả các mã hóa "hợp lý" đều tương đương theo nghĩa của đoạn trước, vì vậy mã hóa chính xác không thành vấn đề.f:ΣΣ

Mã hóa, tuy nhiên, vấn đề trong các mô hình tính toán bị hạn chế. Lấy một ví dụ cực đoan, giả sử rằng bạn xem xét các máy Turing bị giới hạn thời gian: giả sử bạn muốn máy của mình chấm dứt trong thời gian đối với một số c , trong đó n là độ dài của đầu vào (dưới dạng chuỗi). Chúng ta không còn có thể chuyển đổi giữa mã hóa nhị phân và mã hóa đơn nguyên, bởi vì mã hóa nhị phân nhỏ gọn hơn nhiều. Khi chúng ta nói về hàm tính toán thời gian đa thức của các số nguyên , chúng tôi xác định rằng các số nguyên được mã hóa dưới dạng nhị phân. Ngay cả điều này là một sự lựa chọn hơi tùy tiện, vì mã hóa thập phân sẽ dẫn đến cùng một khái niệm về tính toán thời gian đa thức.O(nc)cn

Vì vậy, để trả lời câu hỏi của bạn - mã hóa được chỉ định như một phần của định nghĩa của mô hình bị hạn chế.


"Một số thực tế cơ bản mà bạn đang thiếu ở đây là tất cả các mã hóa mà bạn đề cập đều tương đương từ góc độ tính toán: có một hàm tính toán ánh xạ mã hóa nhị phân của một số sang mã hóa đơn nguyên của nó, hoặc ngược lại" - vâng, tôi trong phiên bản gốc của câu hỏi của tôi, nhưng tôi không thể thấy nó phù hợp với câu hỏi về các mô hình yếu hơn như thế nào. Rõ ràng là mã hóa phải được chỉ định như một phần của định nghĩa mô hình, nhưng câu hỏi đặt ra là làm thế nào người ta có thể đi đến một định nghĩa hợp lý như vậy.
Stefan Lutz

1
Người ta kéo định nghĩa này ra khỏi chiếc mũ. Vì các định nghĩa khác nhau có xu hướng tương đương nhau, nên định nghĩa chính xác không thành vấn đề. Khi đó, sẽ có một số khái niệm khác nhau về sự phức tạp. Ví dụ, đối với một số thuật toán đồ thị, nó tạo ra sự khác biệt nếu bạn được cung cấp một ma trận kề hoặc một danh sách các cạnh.
Yuval Filmus 4/03/2015

Vì vậy, để tóm tắt: a) Định nghĩa của mỗi mô hình tính toán đơn lẻ phải bao gồm cú pháp, ngữ nghĩa VÀ một mã hóa phù hợp. b) Định nghĩa "mã hóa phù hợp" hoàn toàn độc lập với cú pháp và ngữ nghĩa của mô hình. c) Không có cách nào để đưa ra định nghĩa về "mã hóa phù hợp" có giá trị cho tất cả các mô hình tính toán. Đúng không?
Stefan Lutz

Tôi đồng ý với a) và b), nhưng với c) chỉ một phần. Bạn có thể định nghĩa một mã hóa phù hợp đóng vai trò là "mã hóa tiêu chuẩn", được sử dụng trừ khi đề cập rõ ràng về thực tế được thực hiện. Trong trường hợp số, mã hóa tiêu chuẩn như vậy tồn tại - mã hóa nhị phân.
Yuval Filmus 4/03/2015

M

4

Trước hết, bạn không thể sửa "mã hóa phù hợp" thành chuỗi nhị phân hoặc bất kỳ mã hóa nào khác. Điều này là do bạn sẽ mất quá nhiều mô hình tính toán, bởi vì các mô hình tính toán khác nhau có thể có các mô hình đầu vào và đầu ra rất khác nhau. Nói cách khác, họ có thể không "nói" chuỗi.

Ví dụ: các thuật ngữ của phép tính lambda chưa được kiểm tra là các biến hoặc áp dụng một thuật ngữ này cho một thuật ngữ khác hoặc là sự trừu tượng hóa của một thuật ngữ lambda. Đầu vào và đầu ra là các thuật ngữ, chuỗi tùy ý. Tuy nhiên, phép tính lambda chưa được xử lý là Turing-Complete vì tồn tại một "mã hóa phù hợp" mã hóa các số tự nhiên dưới dạng các số hạng lambda của một dạng nhất định và theo mã hóa này cho mỗi hàm tính toán có tồn tại thuật ngữ lambda tính toán nó.

Bạn có thể chính thức hóa "mã hóa phù hợp" nếu bạn sửa máy Turing làm mô hình tính toán tham chiếu của mình và sau đó yêu cầu mã hóa và giải mã từ và sang chuỗi nhị phân phải được thực hiện bởi máy Turing luôn dừng. Ví dụ: máy Turing sẽ có thể dịch một số tự nhiên thành một chuỗi nhị phân thành một thuật ngữ Lambda biểu thị số này, mô phỏng việc giảm tính toán lambda và dịch kết quả trở lại thành chuỗi nhị phân.

Đối với các mô hình tính toán đơn giản hơn, tôi sẽ mong đợi cách tiếp cận tương tự: lấy mô hình tính toán tham chiếu và sửa mã hóa các số tự nhiên, sau đó đảm bảo rằng mã hóa và giải mã được thực hiện bởi các phiên bản của mô hình đơn giản đó. Như bạn đã lưu ý, đối với các máy Turing bị tê liệt, sử dụng các số được mã hóa đơn và nhị phân sẽ không mang lại một mô hình tính toán tương đương.


Có thể là bạn có những thứ quay lại trong đoạn cuối? Bạn viết rằng mã hóa được thực hiện bởi mô hình đơn giản, không phải mô hình tham chiếu - trong đoạn trước bạn muốn mã hóa được thực hiện bởi mô hình tham chiếu, chứ không phải mô hình khác (phép tính lambda).
Stefan Lutz

Nếu bạn đang nghiên cứu các mô hình tính toán yếu hơn, bạn không muốn sử dụng máy Turing ở bất cứ đâu, ngay cả trong giai đoạn mã hóa / giải mã. Sau đó, bạn có thể thực hiện tất cả các tính toán trong giai đoạn mã hóa và về bất kỳ mô hình tính toán nào sẽ được hoàn thành. Vì vậy, bạn cần sử dụng mô hình tham chiếu đơn giản hơn để mã hóa / giải mã.
Hoopje

1
nNchurch:Nlambdatermchbạnrch(n)toBTôinmộtry:tôimộtmbdmộttermtôimộtmbdmộttermwΣ*
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.