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.
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.
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ử.
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?
fix
và match
. 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.
T
, Coq định nghĩa một nguyên tắc cảm ứng T_ind
là 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).