Sự khác biệt giữa ngôn ngữ kim loại tính toán của Moggi và phép tính lambda của Moggi là gì?


8

Đây là một sự nhầm lẫn tham khảo. Đôi khi tôi thấy mọi người sử dụng thuật ngữ "Ngôn ngữ kim loại tính toán của Moggi" để chỉ tính toán được trình bày bởi Moggi, và đôi khi để "tính toán lambda tính toán của Moggi". Đôi khi, họ sử dụng và đôi khi .λmlλc

Tôi đã luôn cho rằng cả hai đều giống nhau, nhưng đọc bản tóm tắt từ bài nói chuyện của Katsumata và Moegelberg, nó nói :

chúng tôi cho thấy sự đầy đủ của bản dịch đơn âm của Moggi từ phép tính lambda tính toán với các khoản tiền cho kim loại tính toán với các khoản tiền bằng cách sử dụng toán tử TT-nâng và đóng TT.\lc\lml

Những ngôn ngữ này có giống nhau không? Họ được giới thiệu cụ thể với những cái tên này ở đâu? Có vẻ như đôi khi Moggi nói về mô hình cho cái mà anh ta gọi là ngôn ngữ kim loại, nhưng trong bài báo khác, anh ta nói về phép tính lambda tính toán.λc

Câu trả lời:


1

Thuật ngữ có thể hơi khó hiểu nhưng vâng, có hai ngôn ngữ trong ví dụ "Khái niệm tính toán là đơn nguyên" của Moggi (liên kết miễn phí tại đây: https://core.ac.uk/doad/pdf/21173011.pdf ).

Trong bài báo đó, các ngôn ngữ được gọi là , ngôn ngữ kim loại và là "ngôn ngữ lập trình". Tôi tin rằng đóng vai trò của phép tính lambda tính toán nhưng tôi có thể bị nhầm. Một khía cạnh khó hiểu là cả hai ngôn ngữ đều có hàm tạo kiểu rõ ràng đại diện cho đơn nguyên, nhưng chúng được sử dụng khác nhau.λmlλplλplT

λml là ngôn ngữ "thuần túy" với đơn âm , nghĩa là mọi thao tác của đơn vị đều rõ ràng trong các loại và loại chức năng là loại hàm thuần túy. Quan sát quy tắc liên kết (từ hình 3 trên trang 9):Tτ1τ2

x:τmle1:Tτ1x1:τ1mle2:Tτ2x:τmlletTx1e1ine2:Tτ2

e1 và được nhập rõ ràng dưới dạng các điều khoản của để đánh dấu rằng chúng có hiệu lực. Mỗi biểu hiện hiệu quả thực sự là một thuật ngữ thuần túy với loại đơn âm. Điều này tương tự như cách chúng ta lập trình với các đơn vị trong Haskell trong đó Haskell đóng vai trò của ngôn ngữ kim loại và đơn vị mã hóa các hiệu ứng nhưng thực sự chúng ta luôn thao túng các thuật ngữ "thuần túy" (tôi đặt "thuần túy" trong trích dẫn vì Haskell có hiệu ứng phân kỳ riêng và lỗi).e2Tτ1,Tτ2

Chúng ta có thể thấy điều này trong ngữ nghĩa của ngôn ngữ kim loại: thuật ngữ biểu thị một hình thái , đơn nguyên không phát sinh trừ khi chúng ta đề cập đến nó.x:τmle:τ[τ][τ]

Mặt khác, được dự định là một ngôn ngữ lập trình gọi theo giá trị hiệu quả. Như một thuật ngữ là một thuật ngữ có thể có hiệu lực trả về các giá trị của loại , tương tự như các ngôn ngữ như SML và OCaml. Đó là lý do tại sao trong bài báo, loại chức năng được viết vì đây là loại chức năng có hiệu lực, không phải là chức năng thuần túy.λplx:τple:ττττ

So sánh quy tắc liên kết tại đây (từ hình 5 trên trang 11):

x:τple1:τ1x1:τ1ple2:τ2x:τplletx1e1ine2:τ2

e2x:τple:τ[τ]T[τ]

λplTTaunit -> a->

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.