2017-06-17 15 views
7

Chúng dường như có mục đích tương tự. Sự khác biệt mà tôi đã nhận thấy cho đến thời điểm này là trong khi Program Fixpoint sẽ chấp nhận một biện pháp hợp chất như {measure (length l1 + length l2) }, Function dường như từ chối điều này và sẽ chỉ cho phép {measure length l1}.Sự khác nhau giữa Program Fixpoint và Function trong Coq là gì?

Có phải Program Fixpoint nghiêm ngặt hơn Function hoặc chúng phù hợp hơn cho các trường hợp sử dụng khác nhau không?

+2

Ngẫu nhiên, [Lộ trình Coq v8.7] (https://github.com/coq/roadmaps/blob/master/text/roadmap-8.7.md#implementation-cleanups) cho biết việc triển khai của họ sẽ được sáp nhập. –

+4

Đây là một câu hỏi hay, tôi khuyên bạn nên đến với Coq's gitter nếu bạn cần câu trả lời chi tiết khi mọi người hiểu biết về nó không đọc SO AFAIK; việc thực hiện chức năng và chương trình đã được thực hiện bởi những người khác nhau và trong các ngữ cảnh khác nhau nên thực sự bộ tính năng của họ không phải là một tập hợp con của người khác. Có kế hoạch hợp nhất cả hai trên chúng trong một plugin "Phương trình" mới, nhưng điều đó sẽ không xảy ra trong 8.7, ngay cả khi có nhiều tiến bộ đã được thực hiện. Điều đó đang được nói, tôi nghĩ rằng bạn sẽ thường tốt hơn với Chương trình nếu bạn quan tâm đến khả năng tương thích với các phiên bản Coq trong tương lai. – ejgallego

Trả lời

3

Điều này có thể không phải là một danh sách đầy đủ, nhưng nó là những gì tôi đã tìm thấy cho đến nay:

  • Như bạn đã đề cập, Program Fixpoint cho phép các biện pháp để xem xét nhiều hơn một đối số.
  • Function tạo một câu hỏi foo_equation bổ đề có thể được sử dụng để viết lại các cuộc gọi tới foo bằng RHS của nó. Rất hữu ích để tránh các vấn đề như Coq simpl for Program Fixpoint.
  • Trong một số trường hợp (đơn giản?), Function có thể xác định foo_ind bổ đề để thực hiện cảm ứng dọc theo cấu trúc của các cuộc gọi đệ quy foo. Một lần nữa, rất hữu ích để chứng minh những điều về foo mà không lặp lại hiệu quả đối số chấm dứt trong bằng chứng.
  • Program Fixpoint có thể bị lừa để hỗ trợ đệ quy lồng nhau, xem https://stackoverflow.com/a/46859452/946226. Đây cũng là lý do tại sao Program Fixpoint có thể define the Ackermann chức năng khi Function không thể.
+0

Nó cũng có vẻ không thể xác định chức năng Ackermann với 'Hàm', nhưng' Program Fixpoint' [có thể làm điều đó] (https://stackoverflow.com/questions/10292421/error-in-defining-ackermann-in-coq) . –

+0

Cảm ơn, đã thêm vào câu trả lời. –

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