Mối quan hệ giữa functor trong lý thuyết SML và Category là gì?


24

Cùng suy nghĩ như câu nói này của Andrej Bauer trong câu trả lời này

Cộng đồng Haskell đã phát triển một số kỹ thuật lấy cảm hứng từ lý thuyết thể loại, trong đó monads được biết đến nhiều nhất nhưng không nên nhầm lẫn với monads .

Mối quan hệ giữa functor trong SML và functor trong lý thuyết Category là gì?

Vì tôi không biết về chi tiết của functor trong các ngôn ngữ khác như Haskell hoặc OCaml, nếu có thông tin về giá trị thì vui lòng thêm các phần cho các ngôn ngữ khác.


1
Bạn có thể thử gửi email cho Dave McQueen để có câu trả lời dứt khoát, tôi cho là vậy.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


14

Các danh mục tạo thành một phạm trù (lớn) có đối tượng là các phạm trù (nhỏ) và hình thái của chúng là các chức năng giữa các phạm trù nhỏ. Theo nghĩa này, functor trong lý thuyết thể loại là "hình thái kích thước cao hơn".

ML functor không phải là functor theo nghĩa phân loại của từ này. Nhưng chúng là "các hàm kích thước cao hơn" theo nghĩa lý thuyết loại.

Hãy nghĩ về các kiểu dữ liệu cụ thể trong một ngôn ngữ lập trình điển hình là "nhỏ". Do đó int, bool, int -> int, vv là nhỏ, các lớp trong java là nhỏ, như cấu trúc tốt trong C. Chúng tôi có thể thu thập tất cả các kiểu dữ liệu thành một bộ sưu tập lớn gọi Type. Một hàm tạo kiểu, chẳng hạn như listhoặc arraylà một hàm từ Typeđến Type. Vì vậy, nó là một chức năng "lớn". Một functor ML chỉ là một hàm lớn phức tạp hơn một chút: nó chấp nhận như một đối số một vài điều nhỏ và nó trả về một vài điều nhỏ. "Một số thứ nhỏ ghép lại với nhau" được gọi là cấu trúc trong ML. Về mặt lý thuyết loại Martin-Löf, chúng ta có một vũ trụ Type gồm các loại nhỏ. Các loại lớn thường được gọi là các loại . Vì vậy chúng tôi có:

  1. giá trị là các phần tử của các loại (ví dụ 42 : int:)
  2. loại là các yếu tố của Type(ví dụ int : Type:)
  3. Chữ ký ML là các loại (ví dụ OrderedType:)
  4. các hàm tạo kiểu là các phần tử của các loại (ví dụ list : Type -> Type:)
  5. Quy tắc ML là các yếu tố của các loại (ví dụ String : OrderedType:)
  6. Chức năng ML là các hàm giữa các loại (ví dụ Map.Make : Map.OrderedType -> Make.S:)

Bây giờ chúng ta có thể rút ra sự tương đồng giữa ML và các danh mục, theo đó functor tương ứng với functor. Nhưng chúng tôi cũng nhận thấy rằng các kiểu dữ liệu trong ML giống như "các phạm trù nhỏ không có hình thái", nói cách khác, chúng giống như các tập hợp nhiều hơn chúng giống như các thể loại. Chúng ta có thể sử dụng một sự tương tự giữa ML và lý thuyết tập hợp sau đó:

  1. kiểu dữ liệu giống như bộ
  2. các loại giống như các lớp lý thuyết tập hợp
  3. functor giống như các hàm cỡ lớp

15

Cấu trúc ML tiêu chuẩn gần giống với đại số . Chữ ký của nó mô tả toàn bộ một lớp đại số có hình dạng tương tự.

F:MonGrpF:MộtbRng

Hầu hết những ý tưởng này đã được Burstall và Goguen thực hiện trong một loạt các bài báo trong việc thiết kế một ngôn ngữ đặc tả có tên là CLEAR (Tài liệu tham khảo c5 và c6 trên trang DBLP .) David MacQueen đã làm việc cùng với Burstall và Sannella vào thời điểm đó, và rất quen thuộc với các vấn đề. Hệ thống mô-đun ML tiêu chuẩn dựa trên những ý tưởng này.

Điều mà hầu hết mọi người sẽ tự hỏi là, những gì về hình thái? Functor lý thuyết thể loại có một phần đối tượng và một phần hình thái. Các functor ML tiêu chuẩn có giống nhau không? Câu trả lời là có hoặc không.

  • Phần CÓ của câu trả lời được áp dụng nếu các cấu trúc được đặt hàng đầu tiên. Sau đó, có sự đồng hình giữa các cấu trúc khác nhau của cùng một chữ ký và hàm functor ML tiêu chuẩn tự động ánh xạ chúng thành đồng cấu của chữ ký kết quả.
  • Phần KHÔNG của câu trả lời được áp dụng khi các cấu trúc có các hoạt động bậc cao hơn.

Điều này có nghĩa là Standard ML đang đi chệch khỏi lý thuyết thể loại? Tôi không nghĩ vậy. Tôi nghĩ rằng Standard ML đang làm điều đúng đắn, và lý thuyết thể loại vẫn chưa theo kịp. Lý thuyết danh mục chưa biết cách xử lý các hàm bậc cao hơn. Một ngày nào đó, nó sẽ.


"Lý thuyết danh mục chưa biết cách xử lý các hàm bậc cao hơn." Đó có vẻ là một câu hỏi khác bởi vì tôi nghĩ lý thuyết Danh mục có thể làm tất cả như một nền tảng.
Guy Coder

2
T(X)= =[XX]twtôiceX= =T(X)T(X)
Uday Reddy

Tôi thực sự làm cho nó một câu hỏi thực sự .
Guy Coder

"Một cấu trúc ML tiêu chuẩn gần giống với đại số ". Không phải functor hơi chung chung hơn thế? Không có gì ngăn cản một cấu trúc để chứa các đối tượng không liên quan (loại, giá trị & hàm), tức là. không tạo thành một đại số.
didierc

2
@didierc Một chữ ký cho đại số bao gồm một hoặc nhiều loại (như các loại của chúng tôi) và một hoặc nhiều thao tác (như các hàm của chúng tôi) và tùy chọn một số tiên đề (như thông số kỹ thuật của chúng tôi). Một đại số cho chữ ký chọn các bộ cụ thể cho các loại đó và các hàm cụ thể cho các hoạt động đó, sao cho các tiên đề được thỏa mãn. Chữ ký và cấu trúc SML chính xác là những thứ như vậy, ngoại trừ SML cho phép các hoạt động bậc cao hơn trong khi Đại số thì không.
Uday Reddy

3

Theo hiểu biết tốt nhất của tôi, không có mối quan hệ chính thức nào giữa các functor trong lý thuyết thể loại và functor trong ML (SML hoặc OCaml, chúng đủ gần với mục đích của chúng ta ở đây).

Trong lý thuyết thể loại, functor là các hàm hoạt động trên các đối tượng. Chúng là một cấp trên các hình thái, thường là các hàm hoạt động trên các phần tử (nhiều loại có các đối tượng được đặt với một số cấu trúc đại số và mũi tên là đồng cấu giữa các cấu trúc này). Một functor ML là một chức năng hoạt động trên các mô-đun, một cấp trên các chức năng hoạt động trên các giá trị ngôn ngữ cốt lõi. Tôi nghĩ rằng sự giống nhau dừng lại ở đây.

Các functor ML đã được Dave McQueen rửa tội trong phiên bản sửa đổi Mô-đun cho Standard ML (citeseerx) năm 1985 của ông xuất hiện trong Bản tin đa hình (bài báo gốc sử dụng mô-đun tham số của biểu thức - các ấn phẩm sau này có xu hướng sử dụng tính từ parametriised. Thật không may, tôi không thể tìm thấy một bản sao của bài báo đó. Trong bài viết năm 1986 của mình Sử dụng các loại phụ thuộc để thể hiện cấu trúc mô đun (citeseerx) , ông đặt tên như đã thiết lập.


2
Functor không chỉ là các chức năng trên các đối tượng, chúng còn ánh xạ các hình thái. Functor là "hình thái giữa các loại".
Andrej Bauer

@AndrejBauer Có, functor là các hàm trên các đối tượng. Không phải mọi chức năng trên các đối tượng là một functor, nhưng đó là một sự xem xét thứ cấp ở đây.
Gilles 'SO- ngừng trở nên xấu xa'
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.