Sự xuất hiện tự nhiên của các đơn nguyên sử dụng khung lý thuyết thể loại


18

Hôm nay, một cuộc nói chuyện của Henning Kerstan ("Trace Semantics for Xác suất hệ thống chuyển đổi") lần đầu tiên đối mặt với tôi với lý thuyết thể loại. Ông đã xây dựng một khung lý thuyết để mô tả các hệ thống chuyển tiếp xác suất và hành vi của chúng một cách tổng quát, tức là với các tập hợp trạng thái vô hạn vô hạn và các khái niệm khác nhau về dấu vết. Để kết thúc này, ông đi lên qua vài lớp trừu tượng để cuối cùng kết thúc với khái niệm monads mà ông kết hợp với lý thuyết biện pháp để xây dựng các mô hình mà anh cần.

Cuối cùng, anh ấy đã mất 45 phút để (đại khái) xây dựng một khung để mô tả một khái niệm mà anh ấy đã giải thích ban đầu trong 5 phút. Tôi đánh giá cao vẻ đẹp của phương pháp này (nó không khái quát hóa độc đáo khái niệm trên khác nhau của dấu vết) nhưng nó đập vào mắt tôi như một sự cân bằng lẻ vẫn.

Tôi đấu tranh để xem một đơn nguyên thực sự là gì và làm thế nào một khái niệm chung chung có thể hữu ích trong các ứng dụng (cả về lý thuyết và thực hành). Có thực sự xứng đáng với nỗ lực, kết quả khôn ngoan?

Vì vậy, câu hỏi này:

Có vấn đề nào là tự nhiên (theo nghĩa của CS) mà theo đó khái niệm trừu tượng của các đơn vị có thể được áp dụng và giúp (hoặc thậm chí là công cụ) để có được kết quả mong muốn (hoàn toàn hoặc theo cách đẹp hơn không có)?


2
Mã hóa trạng thái trong một ngôn ngữ lập trình chức năng thuần túy? Đây có phải là một vấn đề CS đủ tự nhiên?
Stéphane Gimenez

2
Vấn đề chung hơn về xử lý hiệu ứng trong các ngôn ngữ chức năng là ví dụ tôi đã thấy nhiều nhất: về lý thuyết, các đơn vị cho hiệu ứng rất gợi cảm và đối với thực tiễn, đơn vị IO của Haskell rất tiện dụng.
jmad

Và những lợi thế sẽ là gì so với ngữ nghĩa cổ điển, tương đối nhẹ? Có phải các đơn vị FP thậm chí giống như trong lý thuyết thể loại? Câu hỏi khi có câu hỏi.
Raphael

Xem câu hỏi này trên cstheory.SE để biết câu hỏi tổng quát hơn sau khi sử dụng lý thuyết danh mục.
Raphael

Câu trả lời:


6

Hỏi xem sự xuất hiện của đơn nguyên có tự nhiên hay không cũng tương tự như hỏi liệu một nhóm (theo nghĩa của lý thuyết nhóm) có tự nhiên không. Một khi bạn chính thức hóa một cái gì đó, trong trường hợp này là một endofunctor, nó có thỏa mãn các tiên đề của việc trở thành một đơn nguyên hay không. Nếu nó thỏa mãn các tiên đề, thì người ta sẽ có được rất nhiều máy móc kỹ thuật miễn phí.

Các khái niệm trên giấy của Moggi về tính toán và các đơn vị đóng dấu khá nhiều vào thỏa thuận: các đơn vị cực kỳ tự nhiên và hữu ích để mô tả các hiệu ứng tính toán theo một cách thống nhất. Wadlervà những người khác đã dịch các khái niệm này để đối phó với các hiệu ứng tính toán trong các ngôn ngữ lập trình chức năng, bằng cách sử dụng kết nối mà functor là một hàm tạo kiểu dữ liệu. Điều này thêm đóng băng trên bánh. Các đơn vị FP cho phép xử lý các hiệu ứng tính toán như IO sẽ cực kỳ không tự nhiên nếu không có chúng. Các đơn vị đã truyền cảm hứng cho các khái niệm hữu ích liên quan như mũi tên và thành ngữ cũng rất hữu ích để cấu trúc các chương trình chức năng. Xem liên kết Wadler để tham khảo. Các đơn vị FP giống như các đơn vị lý thuyết thể loại theo nghĩa là để một đơn vị FP hoạt động cùng các phương trình cần phải giữ --- trình biên dịch dựa trên các đơn vị này. Nói chung, cách trình bày của đơn nguyên khác nhau (các hoạt động và phương trình khác nhau nhưng tương đương), nhưng đây là một sự khác biệt bề ngoài.

Một lượng lớn công việc của Bart Jacobs , để lấy nhưng một ví dụ, sử dụng các đơn nguyên. Rất nhiều công việc bắt nguồn từ than chì, đó là một lý thuyết chung về các hệ thống. Một trong những đóng góp của Jacobs (nhiều) cho khu vực này là sự phát triển một khái niệm chung về ngữ nghĩa học cho các hệ thống (được mô tả là than đá) dựa trên các đơn nguyên. Người ta có thể lập luận rằng khái niệm ngữ nghĩa học là tự nhiên: ngữ nghĩa của một hệ thống là gì? Danh sách các hành động có thể được quan sát!

Một cách để hiểu các đơn nguyên là lập trình đầu tiên trong Haskell bằng cách sử dụng các đơn vị. Sau đó tìm một trong nhiều hướng dẫn tốt có sẵn (thông qua google). Bắt đầu từ góc độ lập trình, sau đó chuyển sang khía cạnh lý thuyết, bắt đầu với một số lý thuyết thể loại cơ bản.

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.