Các loại phụ thuộc so với các loại sàng lọc


58

Ai đó có thể giải thích sự khác biệt giữa các loại phụ thuộc và các loại sàng lọc? Theo tôi hiểu, một loại sàng lọc chứa tất cả các giá trị của một loại đáp ứng một vị ngữ. Có một tính năng của các loại phụ thuộc mà phân biệt chúng?

Nếu nó hữu ích, tôi đã xem qua các loại Tinh chỉnh thông qua dự án Liquid Haskell và các loại phụ thuộc thông qua Coq và Agda. Điều đó nói rằng, tôi đang tìm kiếm một lời giải thích về các lý thuyết khác nhau như thế nào.

Câu trả lời:


33

Sự khác biệt chính là dọc theo hai chiều - trong lý thuyết cơ bản và cách chúng có thể được sử dụng. Hãy chỉ tập trung vào cái sau.

Với tư cách là người dùng, "logic" của các thông số kỹ thuật trong LiquidHaskell và các loại hệ thống sàng lọc nói chung, bị giới hạn ở các đoạn có thể quyết định để việc xác minh (và suy luận) hoàn toàn tự động, nghĩa là người ta không yêu cầu "thuật ngữ chứng minh" về loại cần thiết trong toàn bộ thiết lập phụ thuộc. Điều này dẫn đến tự động hóa đáng kể. Ví dụ, so sánh sắp xếp chèn trong LH:

http://ucsd-progsys.github.io/lh-workshop/04-case-study-insertsort.html#/ordered-lists

so với ở Idris

https://github.com/davidfstr/idris-inserts-sort/blob/master/InsertsSort.idr

Tuy nhiên, tự động hóa có giá. Người ta không thể sử dụng các hàm tùy ý làm thông số kỹ thuật như người ta có thể trong thế giới phụ thuộc hoàn toàn, điều này hạn chế lớp thuộc tính mà người ta có thể viết.

Do đó, một mục tiêu của các hệ thống sàng lọc là mở rộng lớp của những gì có thể được chỉ định, trong khi đó của các hệ thống phụ thuộc hoàn toàn là tự động hóa những gì có thể được chứng minh. Có lẽ có một cuộc họp vui vẻ, nơi chúng ta có thể có được những điều tốt nhất của cả hai thế giới!


Có cách nào để ánh xạ cơ học từ thông số kỹ thuật dựa trên loại sàng lọc sang đặc điểm kỹ thuật dựa trên loại phụ thuộc không? Hay là "đẳng cấu" như vậy chưa được nghiên cứu đủ?
Erik Allik

1
AFAIK một "đẳng cấu" như vậy đã không được nghiên cứu nhiều. Mặc dù có một số công việc gần đây, hãy xem: "Chính thức hóa các loại sàng lọc đơn giản trong Coq" của Lehmann và Tanter (sẽ xuất hiện sớm ... đây là một repo GH: github.com/pleiad/Refinements )
Ranjit Jhala

Làm thế nào về các loại phụ thuộc đường dẫn trong Scala?
Yang Bo

1
@RanjitJhala Tôi nghĩ bạn đã vô tình có mục tiêu trong đoạn cuối cùng sai vòng?
Noldorin

1
@Noldorin Tôi muốn nói Ranjit đã nói đúng đoạn cuối của mình. "Loại sàng lọc ... bị giới hạn ở các mảnh có thể quyết định để xác minh (và suy luận) hoàn toàn tự động" so với "các điều khoản bằng chứng ... cần thiết trong ... phụ thuộc [loại]". Do đó, dân gian làm việc trong các loại sàng lọc đang cố gắng mở rộng bao nhiêu có thể được chỉ định trong một loại sàng lọc trong khi vẫn tự động không thể suy ra / kiểm chứng được, trong khi những người làm việc trong các loại phụ thuộc đang cố gắng tự động hóa việc tạo ra các thuật ngữ chứng minh.
raiph

22

Các loại sàng lọc chỉ đơn giản là các loại thông thường với các vị ngữ. Đó là, cho rằng là một loại thông thường và là một số vị ngữ trênTPT

{v:TP(v)}
là loại sàng lọc. trong trường hợp này được gọi là một loại cơ sở .T

AFAIK, trong Liquid Haskell, họ cũng cho phép một số loại hàm phụ thuộc , đó là loại [1]. Lưu ý rằng các loại phụ thuộc hoàn toàn (như loại sigma) không được phép.{x:T1T2P}

Hệ thống Liquid Type, được mô tả trong [1] thực sự có thể quyết định được và Liquid Haskell sử dụng bộ giải SMT. Tuy nhiên, Liquid Haskell cũng yêu cầu các thuật ngữ bằng chứng (hoặc giá trị, vì chúng được gọi bằng ngôn ngữ không phụ thuộc): nếu bạn ngồi xuống để viết chương trình Liquid Haskell, bạn hãy viết các hàm của riêng mình, không chỉ các loại.

[1] http://goto.ucsd.edu/~rjhala/l Liquid / l Liquid_types.pdf


1
sigma có thể được mã hóa bằng pi bằng cách sử dụng mã hóa giống như nhà thờ, nhưng các loại chức năng sàng lọc của AFAIK dạng lỏng không phải là loại pi (chức năng phụ thuộc).
fread2281

15

Các loại phụ thuộc là các loại phụ thuộc vào các giá trị theo bất kỳ cách nào. Một ví dụ kinh điển là "loại vectơ có độ dài n", trong đó nlà một giá trị. Các loại sàng lọc, như bạn nói trong câu hỏi, bao gồm tất cả các giá trị của một loại nhất định thỏa mãn một vị từ nhất định. Ví dụ: loại số dương. Những khái niệm này không liên quan đặc biệt (mà tôi biết). Tất nhiên, bạn cũng có thể có các loại sàng lọc phụ thuộc một cách hợp lý, như "loại của tất cả các số lớn hơn n".


3
Là một tập hợp con của người khác? Các loại sàng lọc dường như có thể giải quyết được bằng cách sử dụng SMT, nhưng các loại phụ thuộc yêu cầu các điều khoản chứng minh của riêng bạn ...
jmite

4
"Có phải một tập hợp con của cái khác?" Không. Đó là lý do tại sao tôi đưa ra các ví dụ về loại sàng lọc không phụ thuộc và loại phụ thuộc không phải là loại sàng lọc.
Alexey Romanov

8
các loại sàng lọc không thể được mã hóa bằng sigma?
fread2281

3
Ví dụ của bạn dường như không thể hiện quan điểm của bạn. Các số dương được định nghĩa là các số lớn hơn 0. Điều này không có nghĩa là "loại số dương" chính xác là "loại của tất cả các số lớn hơn 0"?
akdom

2
Có phải là không thể có một vị từ tinh chỉnh cũng thực thi độ dài của vectơ không?
CMCDragonkai
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.