Lý thuyết khả thi: sự khác biệt về sức mạnh giữa tính toán Lambda và Máy Turing


48

Tôi có ba câu hỏi con liên quan, được đánh dấu bằng các gạch đầu dòng bên dưới (không, chúng không thể bị chia tách, nếu bạn đang tự hỏi). Ở đây , Andrej Bauer đã viết rằng một số chức năng có thể thực hiện được thông qua máy Turing, nhưng không phải thông qua tính toán lambda. Một bước quan trọng trong lý luận của ông là:

Tuy nhiên, nếu chúng ta sử dụng phép tính lambda, thì [chương trình] c có nghĩa vụ tính toán một chữ số đại diện cho máy Turing trong số thuật ngữ lambda đại diện cho hàm f. Điều này không thể được thực hiện (tôi có thể giải thích tại sao, nếu bạn hỏi nó như một câu hỏi riêng biệt).

  • Tôi muốn xem một lời giải thích / bằng chứng không chính thức.

Tôi không thấy cách áp dụng định lý Rice ở đây; nó sẽ áp dụng cho vấn đề "máy Turing này có phải là T và thuật ngữ L tương đương lambda không?", bởi vì áp dụng vị từ này cho các thuật ngữ tương đương cho kết quả tương tự. Tuy nhiên, hàm được yêu cầu có thể tính toán các TM khác nhau, nhưng tương đương, cho các thuật ngữ lambda khác nhau, nhưng tương đương.

  • Hơn nữa, nếu vấn đề liên quan đến nội tâm của thuật ngữ lambda, tôi nghĩ rằng việc thông qua mã hóa Gôdel của thuật ngữ lambda cũng sẽ được chấp nhận, phải không?

Một mặt, cho rằng ví dụ của anh ta liên quan đến điện toán, trong phép tính lambda, số bước cần thiết của Máy Turing để hoàn thành một nhiệm vụ nhất định, tôi không ngạc nhiên lắm.

  • Nhưng vì ở đây lambda-compus không thể giải quyết vấn đề liên quan đến máy Turing, tôi tự hỏi liệu người ta có thể xác định một vấn đề tương tự cho lambda-compus hay không và chứng minh rằng nó không thể giải quyết được đối với máy Turing, hoặc thực sự có sự khác biệt về sức mạnh Máy Turing (sẽ làm tôi ngạc nhiên).

Câu trả lời:


56

John Longley có một bài viết khảo sát rất rộng rãi thảo luận về các vấn đề liên quan, "Khái niệm về khả năng tính toán ở loại cao hơn" .

NN(NN)N

Để xác định đầy đủ một mô hình tính toán kiểu cao hơn, chúng ta cần chỉ định quy ước gọi cho các hàm, để cho phép một hàm gọi hàm khác mà nó nhận làm đối số. Trong phép tính lambda, quy ước gọi tiêu chuẩn là chúng ta biểu diễn các hàm theo thuật ngữ lambda và điều duy nhất bạn có thể làm với lambda trong phép tính lambda là áp dụng nó. Trong các mã hóa điển hình với các máy Turing, chúng tôi chuyển các hàm làm đối số bằng cách sửa một mã hóa Godel cụ thể và sau đó các chuỗi đại diện cho chỉ mục của máy bạn muốn chuyển qua làm đối số.

NNn

Một điều đáng chú ý là với các loại cao hơn, nếu một ngôn ngữ ít biểu cảm hơn trong một đơn hàng, thì nó sẽ biểu hiện rõ hơn một đơn hàng, bởi vì các chức năng là chống chỉ định. Tương tự như vậy, có những hàm bạn có thể viết bằng LC mà bạn không thể mã hóa theo kiểu TM (vì chúng dựa vào thực tế là bạn có thể truyền các đối số chức năng và biết rằng người nhận không thể nhìn vào bên trong hàm bạn cung cấp cho nó) .

EDIT: Đây là một ví dụ về chức năng có thể xác định trong PCF, nhưng không phải trong mã hóa TM + Goedel. Tôi sẽ khai báo isAlwaysTruehàm

 isAlwaysTrue : ((unit → bool) → bool) → bool

cái nào sẽ trả về true nếu đối số của nó bỏ qua đối số của nó và luôn trả về true, sẽ trả về false nếu đối số của nó trả về false trên bất kỳ đầu vào nào và đi vào một vòng lặp nếu đối số của nó đi vào một vòng lặp trên bất kỳ đầu vào nào. Chúng ta có thể định nghĩa chức năng này khá dễ dàng, như sau:

isAlwaysTrue p = p (λ(). true) ∧ p (λ(). false) ∧ p (λ(). ⊥)

trong đó tính toán lặp và là toán tử và trên booleans. Điều này hoạt động vì chỉ có ba cư dân unit → booltrong PCF, và vì vậy chúng tôi có thể liệt kê một cách thấu đáo họ. Tuy nhiên, trong mô hình kiểu mã hóa TM + Goedel, pcó thể kiểm tra xem đối số của nó mất bao lâu để trả lời câu trả lời và trả về các câu trả lời khác nhau dựa trên điều đó. Vì vậy, việc thực hiện isAlwaysTruevới các TM sẽ không đáp ứng được thông số kỹ thuật.


1
đây là một cuộc khảo sát tuyệt vời Cảm ơn các liên kết !
Suresh Venkat

Tôi chỉ nhận ra rằng tôi đã quên chấp nhận một câu trả lời, mặc dù tôi có nghĩa là chấp nhận của bạn. Lấy làm tiếc!
Blaisorblade

Sự khác biệt trong mã hóa có nghĩa là bạn có thể phân tích cú pháp của đối số bằng mã hóa kiểu TM và bạn không thể với biểu diễn lambda-compus tiêu chuẩn. Ngoài ra, những gì bạn nói dường như gợi ý HOL còn hơn cả một lý thuyết về phép tính lambda được gõ, nó còn hơn thế nữa?
Hibou57

Ngoài ra, những gì về điều này: cs.virginia.edu/~evans/cs150/ classes / class39 / lecture39.pdf . Điều này có sai ở một khía cạnh nào đó không?
Hibou57

Neel thân mến, bạn có một ví dụ cho một hàm có thể được nhận ra trong mô hình tính toán lambda nhưng không phải trong mô hình Turing không?
Ingo Blechschmidt

29

Những gì Neel nói, và cũng như sau.

NNλλλ

λNN


λNNλ

NNλappn¯f:NNf(k)appn¯k¯n¯nappλ

Xf:X×NNλtf~:X(NN)λsXNNλff~NNλλNNλ

XNNλXX


2
vẫn đang chờ đợi ví dụ tốt hơn đó ...
Jacques Carette

1
λ

Tôi không hiểu làm thế nào cà ri có thể trở nên không thể thay đổi. Bạn sẽ có thể sử dụng lại định lý smn, vì chứng minh của nó xây dựng một hàm trên dữ liệu bậc nhất (naturals). Theo luận án Church-Turing, hành vi này đối với người tự nhiên có thể được thực hiện như một thuật ngữ lambda (sử dụng các chức năng bản địa trong nội bộ, nhưng tôi không thấy điều đó bị cấm như thế nào). Một cách tương tự có thể chứng minh định lý utm, vì vậy theo bài viết của bạn, chúng ta nên được thực hiện. Tôi đang thiếu gì?
Blaisorblade

1
Tôi đã giải thích trong câu trả lời có nghĩa là cà ri trở nên không thể tính toán được, cụ thể là đối tượng được đề xuất không phải là số mũ trong danh mục các bộ đại diện.
Andrej Bauer

Cảm ơn đã giải thích! Thật không may, tôi không thể upvote một lần nữa. Tôi có thể làm theo hầu hết các chi tiết kỹ thuật; Tôi không quen thuộc với các mô hình tô pô, nhưng dù sao tôi cũng quen với "bạn không thể kiểm tra các chức năng trong lập trình chức năng / calcul-tính toán". Đoạn cuối của bạn cũng giải thích lý do tại sao tôi không thể trải qua smn, bởi vì việc curry được cung cấp bởi smn tạo ra mã Gôdel một lần nữa, không phải là các chức năng tiêu chuẩn như bạn yêu cầu. Tôi sẽ thiền về đoạn đó.
Blaisorblade
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.