Có gì khác nhau giữa Set và Type trong Coq? [đóng cửa]


13

Các loại AFAIU có thể là một Setphần tử có chương trình hoặc propositionphần tử có phần tử là Bằng chứng. Vì vậy, dựa trên sự hiểu biết này:

Inductive prod (X Y: Type) : Set := 
| pair: X -> Y -> prod X Y.

Mã sau sẽ biên dịch nhưng nó không phải do lỗi sau. Nếu tôi thay đổi Setvới Typehoặc khác Typevới Setnó biên dịch tốt. Ai đó có thể giúp tôi hiểu lỗi sau đây có nghĩa là gì không? Tôi đang cố gắng dạy bản thân Coq bằng cuốn sách Foundation Foundations.

Lỗi:

Error: Large non-propositional inductive types must be in Type.

2
Các định lý định lý luôn là một vùng màu xám cho CS.SE, nhưng tôi đoán đây là một ứng cử viên tốt để các mod chuyển sang StackOverflow.
jmite

Câu hỏi này có một số câu trả lời ở đây .
Anton Trunov

@jmite Cho rằng câu hỏi này là về tính toán của các công trình với Coq chỉ đóng vai trò là cú pháp cụ thể, tôi nghĩ nó thuộc chủ đề ở đây.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


12

Coq có 3 loại "lớn":

  • Propp1,p2:Pp1=p2
  • Set1=2Set
  • Type là một siêu kiểu của cả hai thứ này, cho phép bạn viết mã một khi hoạt động với một trong hai

Tôi khá chắc chắn rằng lỗi của bạn là do bạn đang xác định Settham số có thể có Type, có nghĩa là chúng có thể Prop, không được phép. Nếu bạn thay đổi điều này:

Inductive prod (X Y: Set) : Set := 
| pair: X -> Y -> prod X Y. 

mã của bạn sẽ hoạt động.


3
Coq không có bằng chứng không liên quan Proptrừ khi bạn thêm nó dưới dạng tiên đề.
Geoff
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.