2013-06-01 37 views
10

Tôi khá mới ở Coq và cố gắng phát triển một khuôn khổ dựa trên nghiên cứu của tôi. Công việc của tôi khá nặng và tôi đang gặp sự cố khi mã hóa nó vì Coq dường như coi bộ xử lý như thế nào.Công thức phù hợp của các bộ trong Coq?

TypeSet, mà họ gọi là 'loại', và tôi có thể sử dụng chúng để xác định một tập hợp mới:

Variable X: Type. 

Và sau đó có một mã hóa thư viện (phụ) đặt là 'Ensembles', là các hàm từ một số Type đến Prop. Nói cách khác, họ là các vị từ trên Type:

Variable Y: Ensemble X. 

Ensemble s cảm thấy giống như bộ toán học thích hợp. Ngoài ra, chúng được xây dựng dựa trên nhiều thư viện khác. Tôi đã thử tập trung vào chúng: xác định một bộ phổ quát U: Set, và sau đó giới hạn bản thân mình (phụ) Ensemble s trên U. Nhưng không. Ensemble s không thể được sử dụng như các loại cho các biến khác, cũng không phải để xác định các tập con mới:

Variable y: Y.   (* Error *) 
Variable Z: Ensemble Y. (* Error *) 

Bây giờ, tôi biết có một số cách để có được xung quanh đó. Câu hỏi "Subset parameter" cung cấp hai câu hỏi. Cả hai đều sử dụng các cưỡng chế. Các gậy đầu tiên để Set s. Thứ hai về cơ bản sử dụng Ensemble s (mặc dù không theo tên). Nhưng cả hai yêu cầu khá một số máy móc để thực hiện một cái gì đó rất đơn giản.

Câu hỏi: Cách đề xuất các bộ xử lý nhất quán (và thanh lịch) là gì?

Ví dụ: Đây là ví dụ về những gì tôi muốn làm: Giả sử một tập hợp DD. Xác định một cặp dm = (D, <) nơi D là một tập hợp con hữu hạn của DD< là một trật tự một phần nghiêm ngặt về D.

Tôi chắc chắn rằng với đủ tinkering với các sự ép buộc hoặc các cấu trúc khác, tôi có thể hoàn thành nó; nhưng không phải theo cách đặc biệt có thể đọc được; và không có trực giác tốt về cách thao tác cấu trúc thêm nữa. Ví dụ: các loại kiểm tra sau:

Record OrderedSet {DD: Set} : Type := { 
    D  : (Ensemble DD); 
    order : (relation {d | In _ D d}); 

    is_finite   : (Finite _ D); 
    is_strict_partial : (is_strict_partial_order order) 
}. 

Nhưng tôi không chắc đó là điều tôi muốn; và nó chắc chắn trông không đẹp lắm. Lưu ý rằng tôi sẽ chuyển tiếp và chuyển tiếp giữa SetEnsemble theo cách có vẻ tùy ý.

Có rất nhiều thư viện ở đó sử dụng Ensemble s, vì vậy phải có cách tốt để xử lý chúng, nhưng những thư viện đó dường như không được ghi lại rất rõ (hoặc ... tất cả).

Cập nhật: Để làm phức tạp hơn nữa, cũng có một số triển khai tập hợp khác, như MSets. Điều này dường như hoàn toàn tách biệt và không tương thích với Ensemble. Nó cũng sử dụng bool thay vì Prop vì một số lý do. Ngoài ra còn có FSets, nhưng nó có vẻ là một phiên bản MSO lỗi thời.

Trả lời

4

Đã nhiều năm trôi qua kể từ khi tôi sử dụng Coq, nhưng hãy để tôi cố gắng trợ giúp.

Tôi nghĩ rằng về mặt toán học nói U: Set cũng giống như nói U là một vũ trụ của các yếu tố và Ensemble U sau đó sẽ có nghĩa là một tập hợp các yếu tố từ vũ trụ mà. Vì vậy, đối với khái niệm và định nghĩa chung chung, bạn hầu như chắc chắn sẽ sử dụng SetEnsemble là một cách có thể về lý luận về tập con của các phần tử.

Tôi khuyên bạn nên xem công việc tuyệt vời của Matthieu Sozeau, người đã giới thiệu type classes to Coq, một tính năng rất hữu ích dựa trên các loại lớp của Haskell. Đặc biệt trong thư viện chuẩn, bạn sẽ tìm thấy định nghĩa dựa trên lớp học của một số PartialOrder mà bạn đề cập trong câu hỏi của mình.

Một tham chiếu khác sẽ là CoLoR library chính thức hóa các khái niệm cần thiết để chứng minh việc chấm dứt ghi lại thuật ngữ. Nó có một bộ khá lớn là generic purpose definitions theo đơn đặt hàng và cái gì không.

+0

Xin chào Adam! Tôi chia sẻ quan điểm chung của bạn về 'Set' và' Ensemble'. Nhưng điều này không cho tôi một cách tốt để (ví dụ) sử dụng một Ensemble như một loại cho một biến mới mà sau đó hoạt động như một tập hợp con. Vâng, không phải không có sự ép buộc. Có lẽ không có cách nào xung quanh điều đó? – mhelvens

+0

Bạn có nghĩa là đối với phần tập hợp con trong * Câu hỏi * của bạn? Vâng, đơn đặt hàng của bạn là một phần anyway, do đó, có bất cứ điều gì ngăn cản bạn từ xác định đơn đặt hàng của bạn trên toàn bộ vũ trụ _DD_ thay thế? Tôi nghĩ rằng đó sẽ là một cách làm theo cách thông thường hơn, trừ khi có một số ràng buộc bổ sung mà bạn không đề cập đến? – akoprowski

+0

Vâng, tất cả các phần của câu hỏi của tôi, thực sự. Ví dụ chỉ là: một ví dụ. Tôi muốn một cách để liên tục chuyển đổi giữa các tập (phụ) và (phụ) mà không phải tính toán theo từng trường hợp cụ thể. --- Nhưng về thứ tự từng phần đó: đó là một thứ tự một phần hữu hạn được chỉ định bằng tay (để đi với tập hợp hữu hạn). Nếu tôi gõ nó như là một thứ tự trên DD nó có thể đặt hàng các yếu tố bên ngoài tập * D *. Tôi không chắc liệu điều đó có gây rối với bất kỳ bằng chứng nào trong tương lai hay không ... nhưng nó không đặc biệt thanh lịch. – mhelvens

Các vấn đề liên quan