Tôi chỉ đọc Dependent Types at Work. Trong phần giới thiệu parametrised loại, tác giả đề cập rằng trong tuyên bố nàyCác loại quy nạp được mô tả trong Agda
data List (A : Set) : Set where
[] : List A
_::_ : A → List A → List A
loại List
là Set → Set
và A
trở thành tranh cãi tiềm ẩn cho cả nhà thầu, tức là.
[] : {A : Set} → List A
_::_ : {A : Set} → A → List A → List A
Vâng, tôi đã cố gắng để viết lại nó một chút khác nhau
data List : Set → Set where
[] : {A : Set} → List A
_::_ : {A : Set} → A → List A → List A
mà buồn bã không hoạt động (Tôi đang cố gắng tìm hiểu Agda trong hai ngày hoặc lâu hơn, nhưng từ những gì tôi thu thập được nó bởi vì các nhà xây dựng được parametrised qua Set₀
và do đó List A
phải ở trong Set₁
).
Thật vậy, sau đây được chấp nhận
data List : Set₀ → Set₁ where
[] : {A : Set₀} → List A
_::_ : {A : Set₀} → A → List A → List A
Tuy nhiên, tôi không còn có thể sử dụng {A : Set} → ... → List (List A)
(đó là hoàn toàn dễ hiểu).
Vì vậy, câu hỏi của tôi: Sự khác biệt thực sự giữa List (A : Set) : Set
và List : Set → Set
là gì?
Cảm ơn bạn đã dành thời gian!
Cảm ơn câu trả lời của bạn! Vẫn còn một điều tôi muốn biết (câu hỏi của tôi có thể hơi mơ hồ một chút, tôi sợ): Tôi không thể xác định 'Danh sách' là' Set → Set' để ngăn sự mâu thuẫn trong hệ thống kiểu, thực tế là gì cơ chế làm cho 'Danh sách (A: Set): Set'" làm việc "? Bởi vì với tôi (đến từ nền Haskell), cả hai đều có vẻ là 'danh sách dữ liệu :: * -> * ở đâu (...) ', nhưng một công trình và cái kia thì không. Cảm ơn! – Vitus
Tôi nghĩ bạn đã nêu lý do; để tránh các nhà xây dựng mâu thuẫn với Set như một đối số cần thiết thuộc về Set₁. Các kiểu dữ liệu tham số cho phép chúng ta viết các kiểu dữ liệu với các chỉ báo sẽ phải kết thúc một cấp "cao hơn", và nó "hoạt động" chỉ vì các điều kiện hoạt động tốt của các kiểu dữ liệu tham số. Mặt khác, có một số tranh cãi về mức độ an toàn của các gia đình quy nạp, như trang wiki minh họa, và tôi nghĩ sự đồng thuận hiện tại là có một số mã Agda nhỏ và đáng tin cậy mà các kiểu dữ liệu ưa thích có thể được dịch sang. – danr
Điều đó xóa nó cho tôi, cảm ơn. Đây là tiền thưởng xứng đáng của bạn. – Vitus