Làm thế nào để lấy được loại bỏ phụ thuộc gõ?


10

Trong lập trình phụ thuộc, có hai cách chính để phân tách dữ liệu và thực hiện đệ quy:

  • Khớp mẫu phụ thuộc : định nghĩa hàm được đưa ra dưới dạng nhiều mệnh đề. Hợp nhất đảm bảo rằng tất cả các trường hợp bị bỏ qua là không thể, và một người giải quyết bên ngoài đảm bảo rằng đệ quy là có cơ sở.
  • Eliminators : Mỗi kiểu dữ liệu quy nạp có một hằng số liên quan E D , đóng vai trò như một nguyên tắc cảm ứng, và như hàm đệ quy mà phân hủy giá trị của loại D . Đây là dài dòng hơn, nhưng có lợi thế là tổng số (tất cả các trường hợp được bao phủ bởi E D ) và chấm dứt bằng cách xây dựng.DEDDED

Tôi đã thấy các bộ khử cho các kiểu dữ liệu phổ biến, như , trong đó bộ khử về cơ bản là cảm ứng toán học, hoặc L i s t , trong đó bộ khử về cơ bản là một nếp gấp.NmộttLTôiSt

Tôi đã đọc một số bài báo về khớp mẫu phụ thuộc và nhiều tài liệu tham khảo các lý thuyết loại trong đó các kiểu dữ liệu có thể được xác định và các trình loại bỏ được cung cấp theo lý thuyết. Ví dụ, Loại bỏ phụ thuộc Pattern Matching mô tả cách UTT được dựa trên eliminators, và làm thế nào mô hình phù hợp có thể được chuyển đổi sang loại bỏ sự hiện diện của tiên đề . Hiểu biết của tôi là, một khi một kiểu dữ liệu được xác định, lý thuyết cung cấp trình khử.K

Những gì tôi chưa tìm thấy (hoặc ít nhất, chưa nhận ra nếu tôi thấy nó) là một mô tả hay về cách người ta có thể rút ra được các loại trừ, cả loại và ngữ nghĩa của chúng.

Ai đó có thể chỉ cho tôi một tài liệu tham khảo mô tả làm thế nào người ta có thể có được một bộ khử từ định nghĩa của kiểu dữ liệu không?


Tôi chắc chắn có một mô tả trong tính toán của các công trình xây dựng hoặc tài liệu Coq (đối với các loại tích cực hoàn toàn - loại bỏ Coq trên các loại phức tạp hơn không hoàn toàn chung chung).
Gilles 'SO- ngừng trở thành ác quỷ'

@Gilles Hiểu biết của tôi là Coq đã không sử dụng các bộ khử, mà thay vào đó sử dụng các toán tử sửa lỗi khớp và bảo vệ riêng biệt.
jmite

3
Ngôn ngữ cốt lõi không sử dụng bộ khử, nhưng khi bạn xác định một loại, Coq sẽ tạo ra một bộ khử được định nghĩa theo fixmatch. Tôi không có tài liệu tham khảo trong tay, nhưng tôi biết tôi đã đọc một cái gì đó về cách loại bỏ này được tạo ra. cs.stackexchange.com/questions/104/ có thể được quan tâm.
Gilles 'SO- đừng trở nên xấu xa'

Đối với bất kỳ loại quy nạp nào T, Coq định nghĩa một nguyên tắc cảm ứng T_indlà loại trừ phụ thuộc. Điều này được định nghĩa theo thuật ngữ đệ quy và khớp mẫu, nhưng về nguyên tắc, bạn có thể giả sử nó là một hằng số mới có cùng loại (với cùng một ngữ nghĩa).
chi

Câu trả lời:


8

Tài liệu tham khảo kinh điển cho điều này là Peter Dybjer, Gia đình quy nạp , đưa ra cách đối xử khá toàn diện đối với các gia đình quy nạp dựa trên các máy đào thải.


6

Bạn có thể tìm thấy một số bài báo gần đây của chúng tôi về điều này hữu ích, vì chúng tôi rút ra các trình loại bỏ cho các kiểu dữ liệu được mã hóa lambda. Ví dụ, hãy xem một cho nguồn gốc chung của eliminators, và điều này một cho các kỹ thuật cơ bản áp dụng chỉ để loại Nat.

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.