Sự khác biệt giữa loại phụ thuộc, loại sàng lọc và logic Hoare


18

Tôi biết ít lý thuyết loại phụ thuộc. Từ wikipedia:

Loại phụ thuộc là loại có định nghĩa phụ thuộc vào giá trị.

Và từ khóa học lý thuyết Loại của tôi, tôi nhớ rằng một loại phụ thuộc là:

Họ các loại được lập chỉ mục bởi một loại.

Nhưng tôi có một sự nhầm lẫn về các loại phụ thuộc và các loại sàng lọc và logic hoare.

Bởi vì từ loại Depenedent vs sàng lọc, các loại sàng lọc trông giống như logic Hoare. Những loại tinh chỉnh năng lượng nào mang lại nhiều hơn ngoài việc cho phép trạng thái được cung cấp phải được thỏa mãn (trông giống như Hoare Logic)?

Điều gì bổ sung mà loại phụ thuộc đưa ra so với các loại sàng lọc? Và là loại Phụ thuộc mạnh hơn các loại Tinh lọc + Bộ giải Sat / Ràng buộc.

bất cứ ai có thể làm rõ không khí với các ví dụ.

Câu trả lời:


18

Có công trình gần đây của Paul-André Melliès và Noam Zeilberger khám phá điều này. Cụ thể, các giấy tờ Functor là Hệ thống sàng lọc loạiĐịnh lý đối ngẫu Isbell cho Hệ thống sàng lọc loại . Ngoài ra còn có một video nói về cuộc nói chuyện đầu tiên.

Tôi nghĩ rằng có rất nhiều nhầm lẫn xung quanh các loại sàng lọc do mọi người nghĩ về các hệ thống cụ thể là đại diện, điều này khiến cho các mục tiêu và chi tiết của các hệ thống cụ thể đó được quy cho ý tưởng chung. Tóm tắt của nó là các hệ thống sàng lọc loại phân loại các thuật ngữ tồn tại độc lập trong khi các loại (không tinh chỉnh), phụ thuộc hay nói cách khác, là một phần của thuật ngữ. Điều này nghe có vẻ quen thuộc và thậm chí có thể hơi mâu thuẫn.

Phần dường như có thể quen thuộc và có thể mâu thuẫn xuất hiện nếu bạn xem các loại à la Curry (bên ngoài) so với các loại à la Church (về bản chất). Khi chúng ta nghĩ về các loại à la Curry, chúng ta nghĩ về các loại như phân loại các thuật ngữ chưa được đánh dấu đã có ý nghĩa. Trong các kiểu à la Church, các thuật ngữ duy nhất tồn tại là các thuật ngữ được gõ tốt, tức là các ràng buộc kiểu là một phần của cú pháp của chúng tôi. Vì vậy, điều tôi đang nói là một hệ thống kiểu Curry thực sự là một hệ thống tinh chỉnh kiểu tinh chỉnh các thuật ngữ chưa được kiểm tra, trong khi hệ thống kiểu Church không phải là hệ thống sàng lọc kiểu. Điều này có nghĩa là, chẳng hạn, chúng ta có thể nghĩ về phép tính lambda được gõ đơn giản là một hệ thống sàng lọc kiểu hoặc là một hệ thống loại không tinh chỉnh.

Tất nhiên, không ai nói rằng các điều khoản của chúng tôi phải được gỡ bỏ các điều khoản. Chúng ta cũng có thể áp dụng một hệ thống sàng lọc kiểu cho các thuật ngữ được gõ và theo lịch sử, đây là bối cảnh mà các loại sàng lọc (theo tên đó) phát sinh. Tuy nhiên, các ứng dụng để gõ mềm minh họa một cái gì đó gần hơn với tình huống được mô tả ở trên.

Cho đến nay tôi chưa nói gì về các loại phụ thuộc. Lý do là nó là một mối quan tâm hoàn toàn trực giao. Tôi muốn nói rằng các hệ thống loại phụ thuộc kiểu mẫu thường được trình bày theo kiểu Giáo hội, và do đó không phải là hệ thống sàng lọc kiểu, mà là NuPRL (dựa trên Lý thuyết loại tính toán , một biến thể của lý thuyết loại phụ thuộc nhất, theo lý thuyết loại Martin-Löf) rõ ràng là một hệ thống sàng lọc kiểu như tôi đã mô tả. Điều khoản trong NuPRL thậm chí có thể không loại! Phải thừa nhận rằng, thực tế rằng "PRL" là viết tắt của "Logic sàng lọc chương trình" cũng có thể là một gợi ý. Mặt khác, Các loại sàng lọc cho ML mô tả một hệ thống loại sàng lọc, có thể là nguồn gốc của thuật ngữ, không phải là một hệ thống loại phụ thuộc theo bất kỳ cách nào.

Đối với bộ ba Hoare, chúng là một hệ thống sàng lọc kiểu. Chúng thực sự được sử dụng như một ví dụ về hệ thống sàng lọc loại trong bài báo đầu tiên. Tuy nhiên, Lý thuyết loại Hoare đưa ra một cái gì đó có thể được xem như là một hệ thống loại không tinh chỉnh cho một ngôn ngữ có bộ ba Hoare.

Để có câu trả lời về "sức mạnh" của các hệ thống khác nhau, bạn cần chỉ định (các) hệ thống loại phụ thuộc cụ thể (họ) và (các) hệ thống loại sàng lọc cụ thể (họ). Thuật ngữ "hệ thống loại phụ thuộc" bao gồm một loại hệ thống loại rất rộng và "hệ thống sàng lọc loại" thậm chí còn rộng hơn. Ngay cả khi đó, các thuật ngữ không loại trừ lẫn nhau, vì vậy nó sẽ không phải là sự so sánh giữa "hệ thống loại phụ thuộc" và "hệ thống loại sàng lọc". Tuy nhiên, nếu theo "hệ thống loại phụ thuộc", bạn đang nghĩ về một cái gì đó như Coq và cho "hệ thống loại tinh chỉnh" một cái gì đó như Loại chất lỏngsau đó nó là một phía đẹp. Coq thường được xem là đủ mạnh để xử lý hầu như tất cả toán học trong thực tế; bạn có thể thực hiện và chứng minh chính xác một bộ giải SMT trong Coq và sau đó sử dụng nó; và một loại tương tự rất gần với loại tập hợp con có thể được xây dựng. (NuPRL theo nghĩa đen có các loại tập hợp con.) Mặt khác, các bộ giải SMT thường bị giới hạn ở các lý thuyết có thể quyết định trong đó Coq không có giới hạn đó; và nhiều hệ thống như Loại chất lỏng có ngôn ngữ giới hạn và không thể mở rộng để chỉ định các vị từ. (Tất nhiên, theo "hệ thống loại phụ thuộc", bạn có thể có nghĩa là Phụ thuộc ML và "hệ thống sàng lọc loại" NuPRL [cũng là một hệ thống loại phụ thuộc] sẽ là một phía theo cách khác.)


1
Cảm ơn bạn rất nhiều, thực sự đã giúp. Vâng, đang đọc các loại phụ thuộc trong lập trình thực hành (popl '99) và bị nhầm lẫn. Chúc mừng.
Pushpa

1
Đây là một câu trả lời FANTASTIC. cảm ơn vì đã viết nó
Jonathan Sterling
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.