Các loại phụ thuộc cung cấp cho bạn tất cả mọi thứ subtyping không?


24

Các loại và Ngôn ngữ lập trình tập trung khá nhiều vào phân nhóm, nhưng theo như tôi có thể nói, phân nhóm không có vẻ đặc biệt cơ bản. Liệu phân nhóm cung cấp cho bạn bất cứ điều gì nhiều hơn các loại phụ thuộc làm gì? Làm việc với các loại phụ thuộc chắc chắn sẽ là công việc nhiều hơn, vì vậy tôi có thể hiểu tại sao các kiểu con có thể hữu ích trong thực tế. Tuy nhiên, tôi quan tâm đến lý thuyết loại làm nền tảng cho toán học hơn là cơ sở cho các ngôn ngữ lập trình, tôi có nên chú ý nhiều đến việc phân nhóm không?

Câu trả lời:


22

Loại phụ và loại phụ thuộc là các khái niệm trực giao.

Subtyping thường được trang bị một khái niệm về sự sụt giảm, theo đó một biểu thức của một loại có thể xuất hiện ở nơi mà một siêu kiểu được mong đợi.

Subtyping có nhiều khả năng có thể quyết định và đơn giản hơn để quản lý trong việc thực hiện.

Gõ phụ thuộc là biểu cảm nhiều hơn. Nhưng nếu bạn từng muốn coi một nhóm cũng là một monoid, thì bạn cần một khái niệm về sự sụt giảm để quên đi cấu trúc bổ sung. Thông thường, chẳng hạn như khi sử dụng Coq, một nghĩa vụ chứng minh tầm thường được tạo ra để đối phó với kiểu ép buộc này, vì vậy trong thực tế, việc phân nhóm có thể không thêm bất cứ điều gì. Điều quan trọng hơn là có cách đóng gói các lý thuyết khác nhau để làm cho chúng có thể tái sử dụng, chẳng hạn như sử dụng lại lý thuyết về đơn chất khi nói về các nhóm. Các lớp loại trong Coq là một sự đổi mới gần đây để làm những việc như vậy. Các mô-đun là một cách tiếp cận cũ.

Nếu bạn tìm kiếm nhanh về "các kiểu phụ thuộc", bạn sẽ thấy một loạt các công việc thêm phân nhóm vào các loại phụ thuộc, chủ yếu từ khoảng năm 2000. Tôi tưởng tượng rằng siêu lý thuyết thực sự rất khó khăn, vì vậy không có phân nhóm các loại phụ thuộc xuất hiện trong trợ lý chứng minh.


3
Cảm ơn bạn, đây chính xác là những gì tôi đang tìm kiếm. Bây giờ tôi đã hỏi một vài câu hỏi của Noob mà dường như đã được đón nhận phần nào mặc dù cstheory.SE không phải là nơi thích hợp cho những câu hỏi như vậy. Trên thang điểm từ -5 đến +5, bạn có khuyến khích hoặc không khuyến khích các câu hỏi tương tự trong tương lai không? Như một lưu ý phụ, như tôi hiểu (từ việc đọc Robert Harper), các lớp loại là một thể loại con của các mô-đun, điều đó có đúng không?
John Salvatier

3
Câu hỏi này nằm ở phía bên phải biên giới của những gì phù hợp với cstheory.SE. Các lớp loại không thực sự là một thể loại con của các mô-đun. Nó giống như các lớp loại hơn là các mô-đun + suy luận kiểu + free_plenses.
Dave Clarke

2
Tôi tưởng tượng rằng bạn luôn có thể mô hình hóa / mô phỏng phân nhóm với các loại phụ thuộc khá dễ dàng. Trong Haskell, HList (chỉ được xây dựng dựa trên loại bình đẳng có thể quyết định) sẽ cho bạn phân nhóm, ví dụ (cf "Hệ thống đối tượng bị bỏ qua của Haskell"). Phần khó duy nhất về phân nhóm là suy luận kiểu và một khi bạn làm việc với các loại phụ thuộc, bạn đã loại bỏ 90% trong số đó.
sclv

(đã thay đổi từ một nhận xét thành một câu trả lời)
Neel Krishnaswami

Lý thuyết tập hợp con của lý thuyết loại Martin-Loef về cơ bản là những gì bạn cần để mô hình hóa cấu trúc mà quên, và có từ những năm 1980. Tôi nghĩ rằng đây là loại những gì @Neel nhận được trong câu trả lời của anh ấy.
Charles Stewart

22

Tuy nhiên, tôi quan tâm nhiều hơn đến lý thuyết loại làm nền tảng cho toán học hơn là cơ sở cho các ngôn ngữ lập trình, tôi có nên chú ý nhiều đến việc phân nhóm không?

Một điều nữa phụ cho bạn là sự bao hàm ngụ ý rằng rất nhiều thuộc tính kết hợp giữ. Một lý thuyết loại phụ thuộc cũng cần một khái niệm về sự không liên quan bằng chứng để mô hình hóa mọi thứ bạn có thể làm với các kiểu con. Ví dụ, trong lý thuyết loại phụ thuộc, bạn có thể ước chừng hình thành một tập hợp con với bản ghi phụ thuộc:

{xS|;P(x)} vs. Σx:S.P(x)

SP(x)x:

X<:Yx:Xx:YP(x)P(x)

Một khi bạn có được điều đó, bạn có thể xây dựng một cách có hệ thống các kiểu con vào lý thuyết loại phụ thuộc. Xem luận án của William Lovas để biết ví dụ về việc thêm phân nhóm vào lý thuyết loại phụ thuộc (trong trường hợp này là Twelf).

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.