Lý thuyết loại phụ thuộc trực quan nhất mà tôi có thể học là gì?


46

Tôi quan tâm đến việc có được một nắm bắt thực sự vững chắc về gõ phụ thuộc. Tôi đã đọc hầu hết TaPL và đọc (nếu không được hấp thụ đầy đủ) 'Các loại phụ thuộc' trong ATTaPL . Tôi cũng đã đọc và đọc lướt qua một loạt các bài viết về cách gõ phụ thuộc.

Nhiều cuộc thảo luận lý thuyết loại dường như tập trung vào việc thêm các tính năng gia tăng cho các hệ thống loại trước đó, chứ không phải "sự khái quát hóa lớn tiếp theo từ hệ thống loại X là gì?". Các kiểu phụ thuộc dường như là sự khái quát hóa lớn tiếp theo từ Hệ thống F, nhưng tôi vẫn chưa tìm thấy ngôn ngữ gõ phụ thuộc trực quan, chính tắc. Nhiều tài liệu tham khảo về Công trình tính toán (quy nạp) khiến tôi nghĩ CoC là ngôn ngữ đó, nhưng những giải thích về ngôn ngữ mà tôi đã thấy dường như không rõ ràng hoặc trực quan với tôi.

Tôi đang mong đợi / đoán một ngôn ngữ như vậy sẽ có các tính năng như: (và xin vui lòng cho tôi biết nếu có bất cứ điều gì cụ thể nhảy ra là bối rối hoặc không thực tế)

  • Trừu tượng tổng quát (có thể có các chức năng từ bất kỳ miền nào trong phân cấp loại sang loại khác, loại -> hạn, thuật ngữ-> loại '' ', v.v.)
  • Có một hệ thống phân cấp vô hạn của việc gõ (thuật ngữ: type: type ': type' ': ...)
  • Một số lượng tối thiểu các yếu tố cơ bản. Tôi đang tưởng tượng rằng ngôn ngữ chỉ khẳng định một yếu tố duy nhất cho mỗi cấp độ. Ví dụ: nó có thể khẳng định rằng ((): Đơn vị: Loại: Loại ': ...). Các yếu tố khác được xây dựng từ các yếu tố này.
  • Tổng và các loại sản phẩm là dẫn xuất.

Tôi cũng đang tìm kiếm một lời giải thích về ngôn ngữ mà lý tưởng sẽ thảo luận:

  • Mối quan hệ giữa trừu tượng và định lượng trong ngôn ngữ đó. Nếu chúng không thống nhất, thì giải thích tại sao chúng không thống nhất.
  • Hệ thống phân cấp kiểu vô hạn rõ ràng

Tôi đang hỏi câu hỏi này vì tôi muốn học lý thuyết loại phụ thuộc nhưng cũng vì tôi muốn tập hợp một hướng dẫn rằng, giả sử một nền tảng CS nhỏ, dạy cách sử dụng và cách hiểu các trợ lý chứng minh và các ngôn ngữ được gõ phụ thuộc.

(Chữ thập được đăng lên Reddit)

Câu trả lời:


35

Có một vài cách khác nhau để tiếp cận điều này:

  1. Lý thuyết loại phụ thuộc . Đây có lẽ không phải là cách dễ nhất để tìm hiểu về các loại phụ thuộc, nhưng bạn có thể xem các bài báo Tính toán xây dựng và các biến thể của chúng, Pure Type Systems, và bài viết của Martin Hofmann về Cú pháp và ngữ nghĩa của các loại phụ thuộc, chẳng hạn.

  2. Định lý chứng minh . Đầu tiên, hãy xem câu trả lời của tôi cho một câu hỏi liên quan: Làm thế nào tôi có thể học về lý thuyết cơ bản của trợ lý chứng minh Coq? .

  3. ΠΣ, trong số những người khác. Và dĩ nhiên, có cuốn sách của Adam Chlipala, được đưa ra trong câu trả lời của Marc Hamann.

Tôi có xu hướng bắt đầu với lập trình, trước khi chuyển sang sử dụng định lý chứng minh, sau đó bắt đầu khám phá các vấn đề lý thuyết hơn.


Tôi có thể tìm thấy giấy tờ cho Epigram, nhưng tôi không thể tìm thấy bản tải xuống thực sự cho Epigram, chỉ có Epigram chưa hoàn thành 2. Bạn có ý tưởng nào không?
John Salvatier

1
Bạn đã tìm thấy: e-pig.org/darcs/Pig09/web ? Epigram có sẵn ở dưới cùng của trang.
Dave Clarke

3
Epigram 1 về cơ bản là không rõ ràng trong một thời gian khá lâu AFAIK - tác giả sử dụng Agda những ngày này (trong khi làm việc trên Epigram 2 sang một bên).
Blaisorblade

Vào năm 2019, tôi không nghĩ Epigram 2 sẽ xảy ra - nhưng bây giờ đã có Idris (và Idris 2!).
xrq

14

λπ

Twelf là một hệ thống chứng minh định lý tốt dựa trên LF. Nhìn qua các ghi chú khóa học nâng cao được cung cấp bởi Frank Pfenning là một giới thiệu tốt về lý thuyết và thực hành của LF.

Điều đó nói rằng, có lẽ nó không phải là hệ thống đầu tiên tốt nhất để học nếu bạn quan tâm đến toán học xây dựng hơn là các yếu tố cơ bản của lý thuyết loại: LF có nghĩa là khung logic và nó là một hệ thống được sử dụng để lý thuyết axiomatise và không thường xuyên hoạt động như một hệ thống mục tiêu trực tiếp. Sử dụng một hệ thống dựa trên lý thuyết loại của Martin-Loef có lẽ là phần giới thiệu tốt nhất -Dave đề cập đến Agda, trong số những người khác - có thể là điểm khởi đầu tốt hơn nếu đây là mục tiêu của bạn, vì bạn có thể bắt đầu với các loại số học và quy nạp nhanh hơn trong một khuôn khổ.


10

CoC rất có thể là con đường để đi. Chỉ cần đi sâu vào Coq và làm việc thông qua một hướng dẫn tốt đẹp như Phần mềm nền tảng (mà Pierce of TaPL và ATTaPL có liên quan).

Khi bạn cảm nhận được các khía cạnh thực tế của việc gõ phụ thuộc, hãy quay lại các nguồn lý thuyết: chúng sẽ có ý nghĩa hơn rất nhiều sau đó.

Danh sách các tính năng của bạn về cơ bản là chính xác, nhưng xem cách chúng phát ra trong thực tế có giá trị bằng một ngàn điểm tính năng.

(Một hướng dẫn khác, nâng cao hơn một chút là Lập trình được chứng nhận của Adam Chlipala với các loại phụ thuộc )


"Trực quan" có lẽ là điểm gắn bó ở đây: có nhiều trực giác bay trong CoC / CIC hơn là chỉ gõ phụ thuộc. Đó là một mục tiêu cuối cùng tốt cho tâm trí của tôi, sự lựa chọn thực sự là giữa Coq và Twelf, nhưng có lẽ không phải là bước đầu tiên tốt nhất để "nắm bắt thực sự vững chắc về việc gõ phụ thuộc".
Charles Stewart

@Charles: Quan điểm của bạn đã được thực hiện. Tôi vẫn nghĩ từ quan điểm thực tế, đó là một vụ cá cược tốt. Mặc dù hiểu biết đầy đủ về CoC / CIC có thể là một công việc phức tạp hơn, Coq (cộng với sự tồn tại của các hướng dẫn cấp độ cơ bản tốt cho nó) giúp bạn dễ dàng tập trung vào việc học chỉ các khía cạnh lập trình hoặc chỉ các khía cạnh trợ lý chứng minh cơ bản (như sở thích của bạn sai khiến) ngay cả trước khi bạn nắm bắt được tất cả sự phức tạp. Tôi nghĩ rằng điều này đủ điều kiện là "trực quan" cho một người không đến từ nền tảng lý thuyết.
Marc Hamann


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.