Mục đích của phép tính tổ hợp SKI (hoặc thậm chí là phép tính lambda) là gì? Một số ví dụ thực tế của việc sử dụng nó là gì?


8

Tôi hiểu nó là gì, nhưng tôi không thấy nó được sử dụng như thế nào cho các thuật toán hay bất cứ thứ gì. Có lẽ tôi đang thiếu một cái gì đó. Tôi cần ai đó cho tôi một ví dụ về cách sử dụng nó để tôi có thể hiểu nó tốt hơn.


2
Có một số ngôn ngữ lập trình bí truyền dựa trên logic tổ hợp, ví dụ Unlambda . Xem thêm tại đây . Bạn có thể tìm thêm thông tin bằng cách khám phá các liên kết trong các bài viết.
Anton Trunov

Câu trả lời:


11

Ứng dụng rõ ràng của phép tính lambda là bất kỳ ngôn ngữ lập trình chức năng nào (ví dụ: Lisp, ML, Haskell) và bất kỳ ngôn ngữ nào hỗ trợ các hàm ẩn danh.

Đối với phép tính tổ hợp, có phải có một "ứng dụng trong thế giới thực" không? Ví dụ, máy Turing hầu như không được sử dụng "trong thế giới thực" nhưng chúng tạo thành cơ sở của lý thuyết tính toán. Một tính năng hữu ích của phép tính tổ hợp là chúng là các hệ thống đơn giản hơn, ví dụ, máy Turing. Nếu bạn muốn chứng minh rằng một số hệ thống khác là Turing-Complete, có thể dễ dàng hiển thị cách nó có thể mô phỏng các tổ hợp hơn là hiển thị nó có thể mô phỏng máy Turing.


1
Tất nhiên, các tổ hợp đã được sử dụng trong việc biên dịch các ngôn ngữ chức năng (mặc dù không phải là phép tính SKI).
cody

1
@cody Xin vui lòng gửi câu trả lời về điều đó! Đó không phải là điều tôi biết vì vậy tôi không muốn chỉnh sửa câu trả lời của mình.
David Richerby

3
Ví dụ, hệ thống loại của Scala đã được hiển thị là Turing-Complete bằng cách nhúng tính toán SK vào đó. Tôi thậm chí không thể tưởng tượng được sự phức tạp ngớ ngẩn của việc nhúng một máy Turing (vạn năng). Trớ trêu thay (được đặt tên) Tính đầy đủ của Turinf hiếm khi được hiển thị với Turing Machines. SQL đã được hiển thị là TC bằng cách triển khai Hệ thống thẻ tuần hoàn, HTML + CSS với Quy tắc 101, Intel MMU bằng cách mã hóa lệnh "Di chuyển, rẽ nhánh nếu không, giảm dần".
Jörg W Mittag

@ JörgWMittag re: " HTML + CSS với Quy tắc 101 " có nghĩa là " Quy tắc 110 "?
RBarryYoung

@RBarryYoung: Tất nhiên, lỗi đánh máy ngu ngốc. Mã ở đây: github.com/elitheeli/stool-machines
Jörg W Mittag

5

Tôi thấy SKI hữu ích để hiểu một số tiên đề logic.

Ví dụ, một tiên đề theo kiểu Hilbert về hàm ý (trực giác) là

(abc)(ab)aca(ba)

Lần đầu tiên tôi nhìn thấy những tiên đề này, tôi đã tự hỏi tại sao trên trái đất chúng nên hoạt động. Chắc chắn, thật dễ dàng để kiểm tra rằng họ giữ. Nhưng tại sao những điều này là đủ, tức là tại sao chỉ sử dụng hai định đề này là đủ để chứng minh (thông qua modus ponens) tất cả các tautology liên quan khác? Bí ẩn ... hay là nó?

Chà, hóa ra mọi tautology phải tương ứng với loại thuật ngữ lambda, nhờ vào sự đồng hình của Curry-Howard. Nhưng cho biết thuật ngữ lambda có thể được viết lại tương đương theo thuật ngữ của tổ hợp một mình. Vì vậy, các loại và phải tạo ra, thông qua ứng dụng, các loại tautology. Và quả thực, hai tiên đề trên là các loại chung nhất cho và .S K S KS,KSKSK


2

Hãy xem LINQ của Microsoft (Truy vấn bằng ngôn ngữ). Nó sử dụng rộng rãi và khá trực tiếp tính toán lambda để thao tác và biến đổi cây biểu thức. Có lẽ ví dụ đầy đủ và tinh vi nhất sẽ là Linq2Query (triển khai SQL Server) thực hiện hiệu quả các phép biến đổi phức tạp tách biệt các phần của cây biểu thức có thể được ủy quyền cho máy chủ cơ sở dữ liệu.

Đây không phải là công nghệ đầu tiên cho phép các truy vấn kết hợp dữ liệu từ nhiều nguồn, nhưng nó cũng có thể là công nghệ đầu tiên tự động gỡ rối các phụ thuộc để tận dụng khả năng thao tác hàng loạt của các máy chủ cơ sở dữ liệu. Nó không hoàn hảo (đôi khi bạn phải giúp nó) nhưng nó hoạt động rất tốt và chú ý đến chi tiết bạn sẽ không nhận được từ con người.

Khi bạn làm phải giúp nó ra, hiểu được tính toán sẽ đưa bạn một chặng đường dài hướng tới việc tìm hiểu những gì đang làm phiền nó - vì vậy ngoài việc gì sử dụng là nó? Có câu trả lời của bạn cho Tại sao tôi phải học điều này khi máy móc sẽ làm điều đó cho tôi?

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.