Trong một câu trả lời trước đây trong trang web Khoa học máy tính lý thuyết , tôi đã nói rằng lý thuyết phạm trù là "nền tảng" cho lý thuyết loại. Ở đây, tôi muốn nói một cái gì đó mạnh mẽ hơn. Lý thuyết phạm trù là lý thuyết loại . Ngược lại, lý thuyết loại là lý thuyết thể loại . Hãy để tôi mở rộng về những điểm này.
Lý thuyết loại là lý thuyết loại
Trong bất kỳ ngôn ngữ chính thức đánh máy, và thậm chí cả trong toán học bình thường sử dụng ký hiệu không chính thức, chúng tôi kết thúc chức năng tuyên bố với các loại . Ẩn ý trong văn bản đó là ý tưởng rằng và là một số thứ gọi là "loại" và là "hàm" từ loại này sang loại khác. Lý thuyết phạm trù là lý thuyết đại số của các "loại" và "hàm" như vậy. (Chính thức, lý thuyết phạm trù gọi chúng là "đối tượng" và "hình thái" để tránh giẫm lên các ngón chân lý thuyết tập hợp của các nhà truyền thống, nhưng ngày càng tôi thấy các nhà lý thuyết phạm trù ném gió như vậy và sử dụng thuật ngữ trực quan hơn: " "và" chức năng ". Nhưng,A B ff:A→BABf
Tất cả chúng ta đã được đưa lên trên lý thuyết tập hợp từ trường trung học trở đi. Vì vậy, chúng ta thường nghĩ về các loại như và là tập hợp và các hàm như là ánh xạ lý thuyết tập hợp. Nếu bạn không bao giờ nghĩ về họ theo cách đó, bạn đang ở trong tình trạng tốt. Bạn đã thoát khỏi việc rửa não theo lý thuyết tập hợp. Lý thuyết phạm trù nói rằng có nhiều loại và nhiều loại chức năng. Vì vậy, ý tưởng về các loại như bộ là hạn chế. Thay vào đó, lý thuyết thể loại axiomatized các loại và chức năng theo cách đại số. Về cơ bản, đó là những gì lý thuyết thể loại. Một lý thuyết về các loại và chức năng. Nó khá phức tạp, liên quan đến mức độ trừu tượng cao. Nhưng, nếu bạn có thể học nó, bạn sẽ có được sự hiểu biết sâu sắc về các loại và chức năng.B fABf
Lý thuyết loại là lý thuyết thể loại
Theo "lý thuyết loại", ý tôi là bất kỳ loại ngôn ngữ chính thức nào được đánh máy, dựa trên các quy tắc cứng nhắc về hình thành thuật ngữ để đảm bảo rằng mọi thứ đều kiểm tra. Nó chỉ ra rằng, bất cứ khi nào chúng ta làm việc trong một ngôn ngữ như vậy, chúng ta đang làm việc trong một cấu trúc lý thuyết thể loại. Ngay cả khi chúng ta sử dụng các ký hiệu lý thuyết tập hợp và suy nghĩ theo lý thuyết tập hợp, cuối cùng chúng ta vẫn viết những thứ có ý nghĩa phân loại. Đó là một sự thật tuyệt vời .
Trong lịch sử, Dana Scott có thể là người đầu tiên nhận ra điều này. Ông đã làm việc để tạo ra các mô hình ngữ nghĩa của các ngôn ngữ lập trình dựa trên phép tính lambda được gõ (và chưa được gõ). Các mô hình lý thuyết tập hợp truyền thống không phù hợp cho mục đích này, bởi vì các ngôn ngữ lập trình liên quan đến đệ quy không giới hạn, điều này đặt ra lý thuyết thiếu. Scott đã phát minh ra một loạt các mô hình ngữ nghĩa nắm bắt các hiện tượng lập trình và nhận ra rằng tính toán lambda đã thể hiện chính xác một lớp các thể loại được gọi là các thể loại đóng cartesian . Có rất nhiều thể loại đóng cartesian không phải là "lý thuyết tập hợp". Nhưng tính toán lambda đánh máy áp dụng cho tất cả chúng như nhau. Scott đã viết một bài luận hay gọi là " Liên quan đến lý thuyết của phép tính lambda"giải thích những gì đang diễn ra, những phần dường như có sẵn trên web. Bài báo gốc đã được xuất bản trong một tập có tên" To HB Curry: Essays on Combinatory Logic, Lambda Tính và Chủ nghĩa hình thức ", Nhà xuất bản Học thuật, 1980. Berry và Curien đã nhận ra cùng một nhận thức, có lẽ là độc lập. Họ đã định nghĩa một cỗ máy trừu tượng phân loại (CAM) để sử dụng những ý tưởng này trong việc thực hiện các ngôn ngữ chức năng và ngôn ngữ mà họ triển khai được gọi là "CAML", là khung cơ bản của F # của Microsoft .
Các hàm tạo kiểu chuẩn như , , , v.v. là hàm functor . Điều đó có nghĩa là chúng không chỉ ánh xạ các loại thành các loại, mà còn các chức năng giữa các loại thành các chức năng giữa các loại. Các hàm đa hình bảo toàn tất cả các hàm như vậy do các hành động của functor. Lý thuyết thể loại được phát minh vào những năm 1950 bởi Eilenberg và MacLane→ L i s t×→Listchính xác để chính thức hóa khái niệm về chức năng đa hình. Họ gọi chúng là "biến đổi tự nhiên", "tự nhiên" bởi vì chúng là những biến đổi duy nhất mà bạn có thể viết theo cách đúng loại bằng cách sử dụng biến kiểu. Vì vậy, người ta có thể nói rằng lý thuyết thể loại đã được phát minh chính xác để chính thức hóa các ngôn ngữ lập trình đa hình, ngay cả trước khi các ngôn ngữ lập trình ra đời!
Một nhà truyền thống lý thuyết tập hợp không có kiến thức về functor và các biến đổi tự nhiên đang diễn ra dưới bề mặt khi anh ta sử dụng các ký hiệu lý thuyết tập hợp. Nhưng, miễn là anh ta sử dụng hệ thống loại một cách trung thực, anh ta thực sự đang thực hiện các công trình phân loại mà không nhận thức được chúng.
Tất cả đã nói và làm, lý thuyết phạm trù là lý thuyết toán học tinh túy về các loại và chức năng. Vì vậy, tất cả các lập trình viên có thể hưởng lợi từ việc học một chút về lý thuyết thể loại, đặc biệt là các lập trình viên chức năng. Thật không may, dường như không có bất kỳ cuốn sách văn bản nào về lý thuyết thể loại nhắm vào các lập trình viên cụ thể. Các cuốn sách "lý thuyết thể loại cho khoa học máy tính" thường được nhắm mục tiêu vào các sinh viên / nhà nghiên cứu khoa học máy tính lý thuyết. Cuốn sách của Benjamin Pierce, lý thuyết thể loại cơ bản cho các nhà khoa học máy tính có lẽ là cuốn sách dễ đọc nhất trong số đó.
Tuy nhiên, có rất nhiều tài nguyên trên web, được nhắm mục tiêu vào các lập trình viên. Các trang Haskellwiki có thể là một điểm khởi đầu tốt. Tại trường đại học Midlands , chúng tôi có các bài giảng về lý thuyết thể loại (trong số những người khác). Khóa học của Graham Hutton được chốt là khóa học "người mới bắt đầu" và khóa học của tôi được chốt là khóa học "nâng cao". Nhưng cả hai đều bao gồm về cơ bản cùng một nội dung, đi đến độ sâu khác nhau. Đại học Chalmers có một trang tài nguyên tuyệt vời về sách và ghi chú bài giảng từ khắp nơi trên thế giới. Trang blog nhiệt tình của "sigfpe" cũng cung cấp rất nhiều trực giác tốt theo quan điểm của một lập trình viên.
Các chủ đề cơ bản bạn muốn tìm hiểu là:
- định nghĩa về danh mục và một số ví dụ về danh mục
- functor, và ví dụ về họ
- biến đổi tự nhiên, và ví dụ về chúng
- định nghĩa về sản phẩm, sản phẩm sao chép và số mũ (không gian chức năng), đối tượng ban đầu và thiết bị đầu cuối.
- điều chỉnh
- các loại đơn nguyên, đại số và Kleisli
Ghi chú bài giảng của riêng tôi trong Trường Cao học Midlands bao gồm tất cả các chủ đề này ngoại trừ chủ đề cuối cùng (đơn nguyên). Có rất nhiều tài nguyên khác có sẵn cho các đơn vị ngày nay. Vì vậy, đó không phải là một mất mát lớn.
Càng biết nhiều toán học, bạn càng dễ học lý thuyết phạm trù. Bởi vì lý thuyết phạm trù là một lý thuyết chung về cấu trúc toán học, thật hữu ích khi biết một số ví dụ để đánh giá cao ý nghĩa của các định nghĩa. (Khi tôi học lý thuyết thể loại, tôi phải tạo ra các ví dụ của riêng mình bằng kiến thức về ngữ nghĩa ngôn ngữ lập trình, bởi vì sách giáo khoa tiêu chuẩn chỉ có các ví dụ toán học, mà tôi không biết gì về nó.) và Scott gọi là " Giới thiệu về logic phân loại"lý thuyết thể loại liên quan đến loại hệ thống (cái mà họ gọi là" logic "). Giờ đây có thể hiểu lý thuyết thể loại chỉ bằng cách liên hệ nó với hệ thống loại ngay cả khi không biết nhiều ví dụ. Rất nhiều tài nguyên tôi đã đề cập ở trên sử dụng cách tiếp cận để giải thích lý thuyết thể loại.