Tại sao Lambda Compus không thể đại diện cho một số tổ hợp?


18

Bài viết này gợi ý rằng có các tổ hợp (đại diện cho các tính toán tượng trưng) không thể được biểu diễn bằng phép tính Lambda (nếu tôi hiểu chính xác mọi thứ):

Câu trả lời:


20

Có một số điều mà người ta có thể muốn làm trong thực tế và điều đó không thể được thể hiện trực tiếp trong phép tính lambda.

Tính toán SF là một ví dụ. Sức mạnh biểu cảm của nó không phải là tin tức; phần thú vị của bài báo (không được hiển thị trong các slide) là lý thuyết thể loại đằng sau nó. Các SF calculus là tương tự như một thực hiện lisp mà bạn cho phép chức năng để kiểm tra việc trình bày lập luận của họ - vì vậy bạn có thể viết những thứ như (print (lambda (x) (+ x 2)))"(lambda (x) (+ x 2))".

Một ví dụ quan trọng khác là song song của Plotkin hoặc . Nói một cách trực giác, có một kết quả chung nói rằng phép tính lambda là tuần tự: một hàm có hai đối số phải chọn một đối số để đánh giá trước. Không thể viết một thuật ngữ lambda orsao cho ( or⊤ ⊥) ⟹ , ( or⊥ ⊤) ⟹ ⊤ và or⊥ ⟹ (trong đó là một thuật ngữ không kết thúc và là một thuật ngữ kết thúc). Điều này được gọi là song song hoặc bởi vì việc triển khai song song có thể thực hiện một bước của mỗi lần giảm và dừng lại bất cứ khi nào một trong các đối số kết thúc.

Một điều nữa bạn không thể làm trong phép tính lambda là đầu vào / đầu ra. Bạn sẽ phải thêm các nguyên thủy bổ sung cho nó.

Tất nhiên, tất cả các ví dụ này có thể được biểu diễn trong phép tính lambda bằng cách thêm một mức độ không xác định, chủ yếu thể hiện các thuật ngữ lambda dưới dạng dữ liệu. Nhưng sau đó mô hình trở nên ít thú vị hơn - bạn mất mối quan hệ giữa các chức năng trong ngôn ngữ được mô hình hóa và trừu tượng lambda.


11

Câu trả lời cho câu hỏi của bạn phụ thuộc vào cách bạn xác định "tính toán" và "đại diện". Các chủ đề trên LTU rằng sclv đề cập , mặt khác, bao gồm chủ yếu là người nói chuyện qua nhau do khác để định nghĩa lệch từ ngữ khác nhau.

Sự khác biệt chắc chắn không phải là một trong những sức mạnh tính toán - mọi hệ thống đang được xem xét đều tương đương với Turing. Vấn đề là sự tương đương Turing không thực sự nói bất cứ điều gì về cấu trúc hoặc ngữ nghĩa của một biểu thức. Cho rằng vấn đề, trong các mô hình cực kỳ nhỏ gọn tính toán đòi hỏi mã hóa phức tạp hoặc các quốc gia ban đầu không tầm thường, nó có thể thậm chí là chưa rõ liệu một hệ thống có khả năng tính toán phổ biến, hay một ảo giác về tính phổ quát đã được tạo ra bởi sự giải thích của một ai đó trong hệ thống . Ví dụ, xem thảo luận về danh sách gửi thư này liên quan đến máy Turing 2 trạng thái, 3 ký hiệu, đặc biệt là các mối quan tâm của Vaughan Pratt.

Ở bất kỳ giá nào, sự khác biệt được rút ra là giữa một cái gì đó như:

  • Những điều có thể được biểu diễn trực tiếp trong một hệ thống, bằng cách gán ngữ nghĩa cho các hoạt động nguyên thủy theo cách mà các hoạt động nhất thiết phải bảo tồn ngữ nghĩa
  • Những điều có thể được biểu diễn "một cách gián tiếp", bằng cách chỉ định một quy trình giải thích được thực hiện bên ngoài hệ thống, trong đó một số cách hiểu được cho là "đơn giản" hơn hệ thống
  • Những thứ có thể được mô phỏng trong một hệ thống bằng một lớp hoàn chỉnh, chẳng hạn như bằng cách xây dựng một trình thông dịch cho một hệ thống khác cung cấp một biểu diễn trực tiếp.

Tương đương Turing chỉ ngụ ý rằng một hệ thống đáp ứng tiêu chí thứ ba cho bất kỳ chức năng tính toán nào, trong khi đó, đó thường là tiêu chí đầu tiên mà chúng ta quan tâm, trong cả hệ thống logic chính thức hoặc ngôn ngữ lập trình (ở bất kỳ mức độ nào thực sự khác nhau).

Đó là một mô tả rất không chính thức, nhưng ý tưởng thiết yếu có thể được đóng đinh chính xác hơn. Trong luồng LtU đã nói ở trên có thể được tìm thấy một vài tham chiếu đến công việc hiện có dọc theo các dòng tương tự.


Cả logic kết hợp của Schönfinkel và tính toán của Church ban đầu được nghĩ ra là sự trừu tượng hóa của lý luận logic, và như vậy, cấu trúc của chúng ánh xạ rất gọn gàng vào lý luận logic và ngược lại. Chúng cũng mang một giả định về tính mở rộng , như được mô tả bởi quy tắc giảm eta:, λx. f xnơi xkhông xảy ra f, tương đương với chỉ fmột mình.

Trong thực tế, một khái niệm rất nghiêm ngặt về tính mở rộng có thể quá giới hạn, trong khi sự căng thẳng không bị hạn chế làm cho lý luận địa phương về các biểu thức phụ trở nên khó khăn hoặc không thể.

Tính toán SF là một phép tính tổ hợp được sửa đổi cung cấp, như là một phép toán nguyên thủy, một dạng phân tích cường độ giới hạn: Khả năng giải cấu trúc các biểu thức được áp dụng một phần, nhưng không phải là giá trị nguyên thủy hoặc biểu thức không chuẩn hóa. Điều này xảy ra để ánh xạ độc đáo vào các ý tưởng như khớp mẫu như được tìm thấy trong các ngôn ngữ lập trình hoặc macro theo kiểu ML như được tìm thấy trong Lisps, nhưng không thể được mô tả trong SK- hoặc calcul-tính mà không, thực hiện một trình thông dịch để đánh giá các thuật ngữ "cường độ".

Vì vậy, tóm lại: Tính toán SF không thể được biểu diễn trực tiếp bằng calcul-compus theo nghĩa đại diện tốt nhất có thể có khả năng liên quan đến việc thực hiện trình thông dịch tính toán SF và lý do cho điều này là một sự khác biệt về ngữ nghĩa cơ bản: Các biểu thức có nội bộ cấu trúc, hoặc chúng được xác định hoàn toàn bởi hành vi bên ngoài của chúng?


Bạn có ý nghĩa gì khi có những quan điểm khác nhau về cách tính toán có thể được trình bày trên Máy Turing?
hawkeye

5

Tính toán SF của Barry Jay có thể xem xét cấu trúc của các thuật ngữ được áp dụng, không có chức năng. Tính toán Lambda và logic kết hợp truyền thống hoàn toàn có chức năng, và vì vậy không thể làm điều này.

Có nhiều phần mở rộng của lambda-compus làm những việc vi phạm độ tinh khiết, hầu hết trong số đó yêu cầu sửa chiến lược viết lại ở một mức độ nào đó, chẳng hạn như thêm trạng thái, điều khiển (ví dụ, thông qua tiếp tục) hoặc biến logic.


2
Xem thêm cuộc thảo luận / tranh luận mở rộng tại Lambda the Ultimate: lambda-the-ultimate.org/node/3993
sclv
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.