Tại sao Coq có Prop?


35

Coq có một loại Prop của các đề xuất không liên quan được loại bỏ trong quá trình trích xuất. Lý do để có điều này là gì nếu chúng ta chỉ sử dụng Coq cho bằng chứng. Prop là không bắt buộc, vì vậy Prop: Prop, tuy nhiên, Coq tự động xâm nhập vào các chỉ mục vũ trụ và chúng ta có thể sử dụng Loại (i) thay vì ở mọi nơi. Có vẻ như Prop làm phức tạp mọi thứ rất nhiều.

Tôi đọc rằng có những lý do triết học để tách Set và Prop trong cuốn sách của Luo, tuy nhiên, tôi đã không tìm thấy chúng trong cuốn sách. Họ là ai?


6
Nếu chúng tôi chỉ sử dụng Coq cho bằng chứng thì tôi nghĩ rằng bạn đã xác định được một điểm chính ở đây. Coq không chỉ được sử dụng cho bằng chứng.
Gilles 'SO- ngừng trở thành ác quỷ'

Câu trả lời:


34

rất hữu ích để trích xuất chương trình vì nó cho phép chúng ta xóa các phần mã vô dụng. Ví dụ, để trích xuất một thuật toán sắp xếp chúng tôi sẽ chứng minh các tuyên bố "cho mọi danh sách có một danh sách k k được ra lệnh và k là một permutatiom của ". Nếu chúng ta viết điều này xuống Coq và giải nén mà không sử dụng P r o p , chúng ta sẽ nhận được:PropkkkProp

  1. "cho tất cả k " sẽ cho chúng ta một bản đồ mà mất danh sách các danh sách,ksort
  2. "sao cho được ra lệnh" sẽ đưa ra một funciton chạy qua k và kiểm tra xem nó đã được sắp xếp chưa, vàkverifyk
  3. " là hoán vị của " sẽ cho phép hoán vị mất đến k . Lưu ý rằng đó không chỉ là ánh xạ, mà còn là ánh xạ ngược cùng với các chương trình xác minh rằng hai bản đồ thực sự là nghịch đảo.kpikpi

Mặc dù các công cụ bổ sung không hoàn toàn vô dụng, nhưng trong nhiều ứng dụng, chúng tôi muốn loại bỏ nó và giữ lại sort. Điều này có thể được thực hiện nếu chúng ta sử dụng trạng thái " k được ra lệnh" và " k là một hoán vị của ", nhưng không "cho tất cả k ".Propkkk

Nói chung, một cách phổ biến để trích xuất mã là xem xét một tuyên bố có dạng x là đầu vào, y là đầu ra, và φ ( x , y ) giải thích ý nghĩa của nó đối với y là một đầu ra chính xác. (Trong ví dụ trên A B là các loại danh sách và ϕ ( , k ) là " k được sắp xếp và k là hoán vị của .") Nếu ϕ nằm trong P r o p thì trích xuất sẽ cho bản đồ f :x:A.y:B.ϕ(x,y)xyϕ(x,y)yABϕ(,k)kkϕProp φ ( x , f ( x ) ) giữ cho tất cả x A . Nếu φ là trong S e t thì chúng ta cũng có được một hàm g g ( x ) là bằng chứng cho thấy φ ( x , f ( x ) ) nắm giữ, cho tất cả x Af:ABϕ(x,f(x))xAϕSetgg(x)ϕ(x,f(x))xA. Thông thường bằng chứng là vô dụng về mặt tính toán và chúng tôi muốn loại bỏ nó, đặc biệt khi nó được lồng sâu bên trong một số tuyên bố khác. cho chúng ta khả năng để làm như vậy.Prop

Đã thêm 2015-07-29: Có một câu hỏi liệu chúng ta có thể tránh hoàn toàn hay không bằng cách tự động tối ưu hóa "mã trích xuất vô dụng". Ở một mức độ nào đó, chúng ta có thể làm điều đó, ví dụ, tất cả các mã được trích xuất từ ​​đoạn logic phủ định (thứ được xây dựng từ loại trống, loại đơn vị, sản phẩm) là vô dụng vì nó chỉ xáo trộn xung quanh đơn vị. Nhưng có những quyết định thiết kế chính hãng người ta phải đưa ra khi sử dụng P r o p . Dưới đây là một ví dụ simpe, nơi Σ phương tiện mà chúng tôi đang trong T y p e phương tiện chúng ta đang ở P r o p . Nếu chúng tôi trích xuất từ PropPropΣTypeProp chúng ta sẽ nhận được một chương trình phân hủy n vào bit của nó thấp nhất b và các bit còn lại k , tức là nó sẽ tính toán tất cả mọi thứ. Nếu chúng ta trích xuất từ Π n : N Σ b : { 0 , 1 }k : N

Πn:NΣb:{0,1}Σk:Nn=2k+b
nbk sau đó chương trình sẽ chỉ tính các bit thấp nhất b . Máy không thể biết cái nào là chính xác, người dùng phải nói với nó những gì anh ta muốn.
Πn:NΣb:{0,1}k:Nn=2k+b
b

1
Tôi hơi bối rối. Bạn có nói rằng nếu không có thì không thể nhận ra trong chương trình trích xuất mà g ( x ) không đóng góp cho đầu ra (nghĩa là nó chỉ xác minh nó)? Có kịch bản nào mà người ta không thể rút ra mã vô dụng như vậy thông qua các phương tiện thông thường có sẵn để tối ưu hóa mã không? Propg(x)
người dùng

1
Từ chương trình trích xuất, người ta có thể nói, "Tôi muốn " và quay lại từ đó. Tôi đã không thể đưa ra một kịch bản vướng mắc đến nỗi chúng tôi không thể tối ưu hóa bất cứ thứ gì không trực tiếp góp phần xác định hoán vị mà thực tế không cần thiết cho tính toán hoán vị (dù sao, từ quan điểm tối ưu hóa toàn cầu ). k
người dùng

1
Bạn không có thông tin "Tôi muốn ". Đó là một giả định bổ sung, và rõ ràng một khi họ cho bạn biết kết quả cụ thể nào họ muốn, bạn có thể tối ưu hóa mã chết. Trên thực tế, tôi đã nghĩ đến một câu trả lời tốt hơn: đó là một câu hỏi thiết kế những thứ cần đặt trong P r o p . Bạn cần biết người dùng muốn gì và anh ta nói với bạn những gì anh ta muốn bằng cách sử dụng P r o p . Thật dễ dàng để đưa ra các ví dụ trong đó có một số tùy chọn. Tôi sẽ thêm một câu trả lời của tôi. kPropProp
Andrej Bauer

2
Theo như tôi biết thì không ai có thể thực sự biết cách trích xuất bất cứ thứ gì từ -types. Rõ ràng là chúng chứa một số nội dung tính toán, nhưng không phải cái này có thể là gì. (1)
Andrej Bauer

3
À được rồi. Sử dụng như một cách chỉ định các quyết định thiết kế có ý nghĩa với tôi hơn là cách xóa mã vô dụng. Prop
người dùng

19

impredicative, mà tạo ra một hệ thống chứng minh rất biểu cảm. Tuy nhiên, đó là "quá" biểu cảm theo nghĩa sau:Prop

impredicative Prop+large elimination+excluded middle

không nhất quán Thông thường, bạn muốn giữ khả năng thêm trung gian bị loại trừ, vì vậy một giải pháp là tiếp tục loại bỏ lớn và đưa ra dự đoán Prop. Khác là để đàn áp loại bỏ lớn.

Coq đã làm cả hai! Họ đổi tên Prop dự đoán thành Set và vô hiệu hóa loại bỏ lớn trong Prop.

Tính biểu cảm đạt được bởi sự thiếu sót là "trấn an" theo nghĩa 99% toán học "hợp lý" có thể được chính thức hóa với nó, và nó được biết là phù hợp với lý thuyết tập hợp. Điều này có khả năng họ sẽ không làm suy yếu nó thành một thứ như Agda, nơi chỉ có vũ trụ dự đoán.


8
Oh và tôi quên đề cập: không phải là trường hợp đó Prop : Prop, điều đó sẽ không nhất quán. Thay vào đó, định lượng trên tất cả các mệnh đề lại là một mệnh đề.
cody

Bạn có thể chỉ cho tôi thêm bất kỳ tài nguyên nào về điều này? Tất cả mọi thứ tôi có thể tìm thấy dường như rất phân tán.
user833970

1
@ user833970 bất kỳ điều cụ thể nào bạn muốn con trỏ đến? Tôi e rằng thực sự không có một tài liệu tham khảo bao gồm tất cả các lý thuyết meta về các loại phụ thuộc. Cuộc thảo luận này (sẽ quay lại đây!) Có thể hữu ích: github.com/FStarLang/FStar/issues/360
cody

cảm ơn, tôi đang làm việc thông qua bài báo nghịch lý Berardi, tôi nghĩ điều đó sẽ giải tỏa sự nhầm lẫn của tôi.
dùng833970

14

Ngay cả khi bạn không quan tâm đến việc trích xuất các chương trình, thì thực tế Proplà không cần thiết cho phép bạn xây dựng một số mô hình mà bạn không thể xây dựng bằng cách sử dụng một tháp vũ trụ dự đoán. IIRC Thorsten Altenkirch có một mô hình của Hệ thống F bằng cách sử dụng tính ngẫu nhiên của Coq.

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.