Làm thế nào chính xác tính toán lambda nắm bắt khái niệm trực quan về khả năng tính toán?


12

Tôi đã cố gắng quấn đầu xung quanh cái gì, tại sao và như thế nào về -calculus nhưng tôi không thể hiểu được "tại sao nó hoạt động"?λ

"Trực giác" Tôi có được mô hình tính toán của Turing Machines (TM). Nhưng việc này chỉ khiến tôi bối rối.λ

Giả sử, TM không tồn tại - vậy thì làm sao người ta có thể "trực giác" thuyết phục về khả năng của -calculus để nắm bắt khái niệm về khả năng tính toán này. Làm thế nào để có một loạt các chức năng cho tất cả mọi thứ và khả năng kết hợp của chúng ngụ ý khả năng tính toán? Tôi đang thiếu gì ở đây? Tôi đã đọc bài báo của Alonzo Church về điều đó nhưng tôi vẫn bối rối và tìm kiếm một sự hiểu biết "đờ đẫn" hơn về điều tương tự.λ


Bạn có cùng một vấn đề với việc viết lại các hệ thống và ngữ pháp không? Trong phép tính lambda, các thao tác cơ bản khá đơn giản: trừu tượng hóa hàm, ứng dụng hàm bằng cách thay thế và tính toán là chuẩn hóa beta. Nói cách khác, tôi không thấy vấn đề của bạn với nó là một mô hình tính toán hợp lý.
Kaveh

2
Tôi chưa thấy ai nghi ngờ rằng các hàm tính toán có thể tính toán được của lambda là có thể tính toán được. Trong lịch sử câu hỏi là nếu đây là các hàm tính toán trực giác duy nhất, đây là một vấn đề hoàn toàn khác với những gì bạn dường như hỏi.
Kaveh

1
Một điều mà tôi thấy hữu ích là cuốn sách của Raymond M Smullyan, "To Mock a Mockingbird" thay thế các chức năng với những con chim trong một khu rừng ma thuật (và là một cuốn sách hay)
dspyz 12/2/2015

1
Cuốn sách của Smullyans là về logic kết hợp
Trismegistos

Câu trả lời:


21

Bạn đang ở một công ty tốt. Kurt Gödel chỉ trích -calculus (cũng như lý thuyết về các hàm đệ quy chung của ông) là không phải là một khái niệm thỏa đáng về khả năng tính toán với lý do nó không trực quan, hoặc nó không giải thích đầy đủ những gì đang diễn ra. Ngược lại, ông thấy phân tích của Turing về khả năng tính toán và khái niệm tiếp theo về máy hoàn toàn thuyết phục. Vì vậy, đừng lo lắng.λ

Mặt khác, để có được một số ý tưởng về cách một mô hình tính toán hoạt động, tốt nhất là viết một số chương trình trong đó. Nhưng bạn không cần phải làm điều đó trong -calculus thuần túy , mặc dù điều đó rất thú vị (theo cách tương tự như cách bắn pháo hoa). Bạn có thể sử dụng một hậu duệ hiện đại của -calculus, chẳng hạn như Haskell.λλ


4
Nếu việc đi cầu lửa là thú vị như bạn nói, thì tôi phải thử nó.
Radu GRIGore

Andrej, bạn có biết bất kỳ tài liệu tham khảo cho những? Godel đã không chấp nhận mô hình của Chruch là nắm bắt tất cả các chức năng có thể giao dịch được nhưng tôi không nhớ đã thấy bất cứ nơi nào ông chỉ trích mô hình đó nhiều hơn thế. Sự chỉ trích của ông về mô hình tính toán lambada của Church ngang bằng với sự chỉ trích của ông đối với các chức năng đệ quy chung của Godel-Herbrand theo như tôi biết.
Kaveh

3
Tôi nghĩ rằng bạn muốn K. Godel: "Một số nhận xét về kết quả không thể giải quyết được", Trong Solomon Feferman, John Dawson & Stephen Kleene (chủ biên), Kurt Gödel: Sưu tầm Tác phẩm Vol. Ii Nhà xuất bản Đại học Oxford. 305--306 (1972). Xem sách.google.si/ ​​Kẻ
Andrej Bauer

6

Bạn lập trình trong đó! Hãy nhìn vào bảng mã nhà thờ . Bạn có thể thấy khá nhiều tất cả số học có thể được thực hiện mà có lẽ sẽ thuyết phục bạn rằng nó cực kỳ mạnh mẽ. Tôi thích nhìn vào các hoạt động trên danh sách tuy nhiên. Bạn có thể định nghĩa hầu hết mọi cấu trúc dữ liệu theo chức năng thực hiện thao tác quan trọng nhất trên nó.

Ví dụ, mã hóa của một danh sách là hàm gập gấp lại nó. Lưu ý rằng đây không phải là mã hóa của Church mà là mã tôi nhận được từ các loại và ngôn ngữ lập trình của Percie. Mã hóa cặp của nhà thờ không cho chúng ta đệ quy, chúng ta phải thêm nó vào trong chính chúng ta bằng một loại tổ hợp đệ quy.

do đó, một danh sách cần hai đối số, một hàm để thực hiện việc gấp và một giá trị ban đầu để cắm vào nếp gấp tại một số điểm.

cons x xs = lam f. lam a. f x (xs f a)
nil       = lam f. lam a. a

bây giờ chúng ta có thể định nghĩa một tổng kết được cung cấp một hàm add (xem phần mã hóa nhà thờ từ phía trên)

sum xs = xs add 0

chúng ta có thể làm nhiều hơn và xác định một chức năng bản đồ

consApply f x xs = cons (f x) xs
map f xs = xs (consApply f) nil

nếu bạn vẫn không tin rằng có sự tính toán đang diễn ra ở đây và muốn chắc chắn rằng bạn có thể thực hiện bất kỳ tính toán nào thì hãy kiểm tra bộ kết hợp điểm cố định . Tuy nhiên, đôi khi tôi hơi đau đầu khi nghĩ về điều đó vì vậy tôi không chắc mình sẽ gọi nó là trực quan nhưng nếu bạn tự đánh giá nó bằng một số đối số, bạn có thể thấy những gì đang diễn ra.

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.