Chúng ta đạt được gì khi có các loại phụ thuộc của người Viking?


13

Tôi nghĩ rằng tôi đã hiểu cách gõ phụ thuộc (DT) đúng cách, nhưng câu trả lời cho câu hỏi này: /cstheory/30651/why-was-there-a-need-for-martin-l%C3% B6f-to-created-intuitionistic-theory-theory đã khiến tôi nghĩ khác.

Sau khi đọc về DT và cố gắng hiểu chúng là gì, tôi đang cố tự hỏi, chúng ta sẽ đạt được gì nhờ khái niệm về DT này? Chúng dường như linh hoạt và mạnh mẽ hơn so với việc tính toán lambda đơn giản (STLC), mặc dù tôi không thể hiểu chính xác "làm thế nào / tại sao".

Chúng ta có thể làm gì với DT không thể thực hiện được với STLC? Có vẻ như việc thêm DT làm cho lý thuyết phức tạp hơn, nhưng lợi ích là gì?

Từ câu trả lời cho câu hỏi trên:

Các loại phụ thuộc được đề xuất bởi de Bruijn và Howard, những người muốn mở rộng sự tương ứng của Curry-Howard từ logic mệnh đề sang logic thứ nhất.

Điều này dường như có ý nghĩa ở một mức độ nào đó, nhưng tôi vẫn không thể nắm bắt được bức tranh lớn về "làm thế nào / tại sao"? Có lẽ một ví dụ cho thấy rõ phần mở rộng này của sự tương ứng CH với logic FO có thể giúp đạt điểm chính trong việc hiểu vấn đề lớn với DT là gì? Tôi không chắc là tôi cũng hiểu điều này.


1
Bạn đã googled họ? Bạn đã nghe nói về Coq, một người ủng hộ định lý được xây dựng trên các loại phụ thuộc? Bạn có biết rằng định lý 4 màu đã được chứng minh bằng Coq?
Dave Clarke

2
Tôi đã thực sự làm. Điều khó khăn với Google là "sức mạnh" thêm đó (vì không có từ nào hay hơn) mà DT cho vay để gõ lý thuyết, nói theo trực giác?
Tiến sĩ

1
Tại sao? Các loại phụ thuộc cho phép bạn nhập nhiều chương trình hơn trong khi vẫn an toàn về loại. Làm sao? Bằng cách tham số hóa các loại với các chương trình.
Martin Berger

@MartinBerger - Bạn có thể giải thích rõ hơn về "nhiều chương trình" không? "Thêm" tôi có thể làm gì hoặc cần gì, từ quan điểm lý thuyết?
Tiến sĩ

2
@DaveClarke That Coq, với các loại lạ mắt của nó, đã được sử dụng để làm những thứ lạ mắt không ngụ ý rằng những thứ ưa thích đó đòi hỏi những loại lạ mắt đó. Ví dụ, Twelf đã có những thành công lớn (như bằng chứng về tính chính xác của SML) và đó chỉ là thứ hai, không phải thứ tự cao hơn. Tôi đã thấy một số hệ thống khá lớn được chứng minh chỉ bằng logic thứ nhất.
Gilles 'SO- ngừng trở thành ác quỷ'

Câu trả lời:


22

Mở rộng nhận xét của tôi: Các loại phụ thuộc có thể gõ nhiều chương trình hơn. "More" chỉ đơn giản là phương tiện mà các thiết lập của chương trình phân typ được với các loại phụ thuộc là một superset đúng đắn của chương trình phân typ trong chỉ đơn giản là đánh máy -calculus (STLC). Một ví dụ sẽ là L i s t 2 3 + 4 ( α ) , danh sách có độ dài 10 , mang các phần tử loại α . Khái niệm 2 * 3 + 4 là cùng lúc một chương trình và một phần của một loại. Bạn không thể làm điều này trong STLC.λList23+4(α)10α23+4

Quy tắc chính phân biệt phụ thuộc với các loại không phụ thuộc là ứng dụng:

ΓM:ABΓN:AΓMN:BΓM:ΠxA.BΓN:AΓMN:B{N/x}

Ở bên trái, bạn có STLC, trong đó các chương trình trong cơ sở 'chảy' chỉ vào chương trình kết luận. Ngược lại, trong quy tắc ứng dụng phụ thuộc ở bên phải, chương trình từ tiền đề bên phải 'chảy' vào loại trong kết luận 1 .N1

Để có thể tham số hóa các loại theo chương trình, cú pháp của các loại phụ thuộc phải phong phú hơn và để đảm bảo rằng các loại được định dạng tốt, chúng tôi sử dụng một 'hệ thống gõ' thứ hai gọi là các loại ràng buộc các loại. Hệ thống phân loại này về cơ bản là STLC, nhưng "tăng một cấp".

Có nhiều cách giải thích về các loại phụ thuộc. Vài ví dụ.


Về màu sắc: với các loại không phụ thuộc, các biểu thức màu đen trong kết luận được xây dựng từ các biểu thức màu đen trong các cơ sở trong khi các biểu thức màu đỏ trong kết luận được xây dựng từ các biểu thức màu đỏ trong các cơ sở. Với các loại phụ thuộc, màu sắc có thể được trộn lẫn bằng cách có các phần màu đen của kết luận được xây dựng từ các phần màu đỏ và màu đen của tiền đề.1


Bây giờ, THAT có rất nhiều ý nghĩa. Nó có thể rõ ràng nhưng vì một số lý do tôi không thể đặt ngón tay lên nó. Đánh giá cao sự chuyển đổi từ bình luận để trả lời. Thật không may, câu hỏi đã được bình chọn để kết thúc, nhưng tôi rất vui vì câu trả lời :)
Tiến sĩ

1
Mộtrr nMộtrr 0= =nmộttMộtrr (n+1)= =nmộttMộtrr n

PVerase(P)erase(V)

FωCoC

@cody Tôi nghĩ thật bất thường khi gọi kiểu xóa này. Cái tên nào hay hơn? Có thể đơn giản hóa loại?
Martin Berger

2

Hãy nghĩ về khai báo kiểu như không có gì nhiều hơn các xác nhận. Hiện tại, tất cả những gì bạn có thể nói là những thứ như isInt32 (), isCharPtr (), v.v. Những xác nhận khác nhau này được chọn để có thể kiểm tra được tại thời gian biên dịch. Nhưng khái niệm này có thể được mở rộng thành những thứ như: isCharPtr () && isNotNull (). Con trỏ Nullable là một vấn đề rất lớn. Con trỏ không nên nullable như lập trường mặc định, với con trỏ nullable là một loại không thể hủy bỏ mà không biết liệu nó có null hay không. Các vấn đề tương tự là những thứ như: isPositiveInteger () hoặc isEvenNaturalNumber ().

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.