Có ngôn ngữ nào có thể diễn đạt trình biên dịch Turing-Complete của riêng mình không?


12

Một nhận xét trên tex.SE làm tôi tự hỏi. Tuyên bố về cơ bản là:

Nếu tôi có thể viết trình biên dịch cho ngôn ngữ X bằng ngôn ngữ X, thì X là Turing-Complete.

Trong khả năng tính toán và ngôn ngữ chính thức, đây là:

Nếu quyết định L L T MM L , sau đó F L = R E .MLLTMMLFL=RE

Dưới đây biểu thị ngôn ngữ của tất cả các mã hóa máy Turing và biểu thị tập hợp các hàm tính toán bằng máy trong . F L LLTMFLL

Điều này có đúng không?


gần gũi, suy nghĩ / đồng ý phải có một số thm thực sự gần giống như thế này, bất kỳ ngôn ngữ "không cần thiết" hoặc "đủ phức tạp" nào có thể diễn tả trình giả lập của chính nó đã hoàn tất TM. một trình biên dịch thường là một phần của trình giả lập. nó thực sự là một "mẫu thiết kế" được tìm thấy trong nhiều bằng chứng hoàn thiện TM nhưng có thể chưa được khái quát hóa / chính thức hóa. có thể là một chủ đề để phân tích / thảo luận thêm trong Trò chuyện Khoa học Máy tính . nghi ngờ / phỏng đoán có một số điều thú vị khác có phần giống như "mọi ngôn ngữ đệ quy không phức tạp / đủ phức tạp và đệ quy có thể được ánh xạ / rút gọn cho mọi ngôn ngữ khác".
vzn

1
Tôi đã tạo ra một ngôn ngữ bí truyền gọi là InterpretMe, không thể làm gì khác ngoài việc diễn đạt thông dịch riêng, vì vậy chắc chắn nó không hoàn chỉnh.
Chính tả không liên kết

Bạn có thể giải thích tuyên bố thứ hai? Là gì ? Làm thế nào là tuyên bố này liên quan đến đầu tiên? M
Revierpost

@reinierpost thường biểu thị số M , đưa ra một số (chấp nhận) mã hóa. Do đó, L T M = { M | M  là một máy Turing } . Theo F L Tôi biểu thị tập hợp các hàm được tính bằng ngôn ngữ L của máy Turing. MMLTM={MM is a Turing machine}FLL
Raphael

Một cách tốt hơn để nêu yêu cầu bồi thường sẽ là: "Nếu có một TM với M LL M = L , sau đó F L = R E .MMLLM=LFL=RE
Raphael

Câu trả lời:


13

Tuyên bố không chính thức là không đúng sự thật, như được thể hiện bởi ngôn ngữ lập trình sau đây. Bất kỳ chuỗi ký tự ASCII nào cũng là một chương trình hợp lệ và ý nghĩa của mọi chương trình là "Xuất ra một chương trình chỉ xuất ra một bản sao của đầu vào của nó." Do đó, mọi chương trình trong ngôn ngữ này là trình biên dịch cho ngôn ngữ nhưng ngôn ngữ không hoàn chỉnh.

Tôi không chắc liệu "phiên bản lý thuyết tính toán" của bạn có tương đương hay không nhưng điều đó cũng không đúng. Theo định lý đệ quy thứ hai của Kleene , đối với bất kỳ mã hóa máy Turing nào, có một TM chấp nhận mã hóa của chính nó và từ chối tất cả các mã khác. 1 Máy này là một ví dụ cho đề xuất. Cụ thể hơn, chúng ta có thể đạt được kết quả bằng cách chọn một mã hóa. Ví dụ: hãy để mọi mã số lẻ mà máy  xác định bởi "Nếu đầu vào của tôi là số lẻ, hãy chấp nhận nó; nếu không, hãy từ chối" và để mã số  2 x mà máy được mã hóa bởi  x trong sơ đồ mã hóa yêu thích của bạn cho các máy Turing. M  là bằng ngôn ngữ  L được chấp nhận bởi  MM2xxMLMnhưng  vẫn chưa hoàn thành.FL


1 lý đệ quy thứ hai Kleene cho biết rằng, đối với bất kỳ liệt kê của hàm đệ quy một phần (ví dụ, đối với bất kỳ mã hóa các chương trình như số nguyên), và bất kỳ một phần đệ quy hàm  Q ( x , y ) , có một số nguyên  p sao cho ϕ p  là hàm ánh xạ y đến Q ( p , y ) . Vì vậy, đặc biệt, hãy để Q là hàm chấp nhận nếu x = y(ϕi)i0Q(x,y)pϕpyQ(p,y)Qx=yvà từ chối khác. Theo định lý, có một số nguyên  mã hóa chương trình ϕ p ( y ) = Q ( p , y ) . Đó là, φ p chấp nhận nó mã hóa riêng  p và từ chối tất cả các đầu vào khác.pϕp(y)=Q(p,y)ϕpp


1
Theo nghĩa nào thì mỗi chương trình trong ngôn ngữ đó là trình biên dịch cho ngôn ngữ đó? Mỗi chương trình là một chương trình nhập một chương trình bằng ngôn ngữ đó và đưa ra một chương trình khác nhau bằng ngôn ngữ đó, vâng, nhưng các quines thường không được coi là trình biên dịch.
user253751

1
Tôi nghĩ @immibis có một điểm: trình biên dịch của bạn c ( P ) = { x c trong khi tất cả các chương trình trong ngôn ngữ là P ( x ) = P , vì vậy c rõ ràng không có trong ngôn ngữ . Tui bỏ lỡ điều gì vậy? c(P)={xreturn P}P(x)=Pc
Raphael

1
@immibis Tôi (muộn màng) nghĩ rằng bạn đúng. Dường như điều tôi muốn viết là ngữ nghĩa của mọi chương trình chỉ là "đầu ra của bạn". Điều đó dường như đủ gần với những gì tôi đã viết rằng đó có lẽ là những gì tôi muốn nói ở nơi đầu tiên. Hoặc có lẽ tôi đã rất may mắn khi khoảng cách chỉnh sửa từ câu trả lời sai của tôi đến câu trả lời đúng là quá nhỏ. :-)
David Richerby

1
Câu trả lời bây giờ cho biết "bỏ qua đầu vào của nó và xuất ra một bản sao của đầu vào của nó" - bạn không thể thực hiện cả hai.
dùng253751

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.