Đây là một thử thách cảnh sát và cướp dựa trên việc xác định ngôn ngữ và chứng minh rằng chúng đã hoàn thành Turing.
Đây là chủ đề của cảnh sát. Chủ đề của bọn cướp ở đây .
Cảnh sát
Là một cảnh sát, bạn sẽ chuẩn bị hai điều:
Một đặc điểm kỹ thuật chính thức của ngôn ngữ lập trình hoặc hệ thống tính toán khác. (Hệ thống tính toán được định nghĩa dưới đây.)
Một bằng chứng cho thấy hệ thống của bạn đã hoàn thành Turing, theo định nghĩa hơi nghiêm ngặt dưới đây.
Bạn sẽ đăng thông số kỹ thuật ngôn ngữ của mình và bọn cướp sẽ cố gắng "bẻ khóa" nó bằng cách chứng minh tính hoàn chỉnh của Turing. Nếu bài nộp của bạn không bị bẻ khóa trong vòng một tuần, bạn có thể đánh dấu nó là an toàn và đăng bằng chứng của mình. (Câu trả lời của bạn có thể bị vô hiệu nếu ai đó tìm thấy lỗ hổng trong bằng chứng của bạn, trừ khi bạn có thể sửa nó.)
Đây là một cuộc thi phổ biến , vì vậy người chiến thắng sẽ là câu trả lời có nhiều phiếu bầu nhất và không bị bẻ khóa hoặc vô hiệu. Thử thách đã kết thúc mở - tôi sẽ không chấp nhận câu trả lời.
Vì lợi ích của thách thức này, một hệ thống tính toán sẽ được định nghĩa là bốn điều:
Một "bộ chương trình"
P
. Đây sẽ là một tập hợp vô hạn có thể đếm được, ví dụ: chuỗi, số nguyên, cây nhị phân, cấu hình pixel trên lưới, v.v. (Nhưng hãy xem giới hạn kỹ thuật bên dưới.)Một "tập hợp đầu vào"
I
, cũng sẽ là một tập hợp vô hạn có thể đếm được và không cần phải là tập hợp giống nhưP
(mặc dù có thể như vậy).Một "bộ đầu ra"
O
, tương tự sẽ là một tập hợp vô hạn có thể đếm được và có thể hoặc không giốngP
hoặcI
Một thủ tục xác định, cơ học để tạo ra một đầu ra
o
từ chương trìnhp
và đầu vàoi
, trong đóp
,i
vào
là thành viên củaP
,I
vàO
tương ứng. Về nguyên tắc, quy trình này phải được thực hiện trên máy Turing hoặc mô hình tính toán trừu tượng khác. Tất nhiên, thủ tục có thể không dừng lại, tùy thuộc vào chương trình và đầu vào của nó.
Các bộ P
, I
và O
phải được như vậy mà bạn có thể thể hiện chúng như dây đàn một cách tính toán. (Đối với hầu hết các lựa chọn hợp lý, điều này sẽ không thành vấn đề; quy tắc này tồn tại để ngăn bạn chọn các bộ lạ, chẳng hạn như bộ máy Turing không dừng lại.)
Tính đầy đủ của Turing sẽ được định nghĩa như sau:
- Đối với bất kỳ chức năng một phần tính toán
f
từI
đếnO
, tồn tại một chương trìnhp
trongP
đó có đưap
và đầu vàoi
, đầu ra làf(i)
nếuf(i)
có một giá trị. (Nếu không thì chương trình không dừng lại.)
Từ "tính toán" trong định nghĩa trên có nghĩa là "có thể được tính bằng máy Turing".
Lưu ý rằng cả quy tắc 110 và thẻ tuần hoàn bit đều không hoàn thành Turing theo định nghĩa này, bởi vì chúng không có cấu trúc đầu vào-đầu ra bắt buộc. Tính toán Lambda là Turing hoàn chỉnh, miễn là chúng ta xác định I
và O
là số của Giáo hội . (Nó không hoàn chỉnh nếu chúng ta nói I
và O
trở thành biểu thức lambda nói chung.)
Lưu ý rằng bạn không phải cung cấp ngôn ngữ của mình, nhưng bạn có thể đưa một câu vào câu trả lời nếu bạn muốn. Tuy nhiên, bạn không nên dựa vào việc triển khai để xác định ngôn ngữ theo bất kỳ cách nào - thông số kỹ thuật phải tự hoàn thiện và nếu có mâu thuẫn giữa thông số kỹ thuật và việc triển khai thì điều này nên được coi là một lỗi trong quá trình triển khai.