Apa perbedaan antara Set dan Ketik dalam Coq? [Tutup]

13

Jenis AFAIU dapat berupa Setelemen yang merupakan program atau propositionelemen yang merupakan Bukti. Jadi berdasarkan pemahaman ini:

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

Kode berikut harus dikompilasi tetapi itu bukan karena kesalahan berikut. Jika saya berubah Setdengan Typeatau yang lain Typedengan Setitu mengkompilasi dengan baik. Dapatkah seseorang membantu saya memahami apa arti kesalahan berikut? Saya mencoba untuk belajar sendiri Coq menggunakan buku Yayasan Perangkat Lunak.

Kesalahan:

Error: Large non-propositional inductive types must be in Type.
Abhishek Kumar
sumber
2
Provers teorema selalu menjadi area abu-abu untuk CS.SE, tapi saya menduga ini adalah kandidat yang baik untuk mod untuk bermigrasi ke StackOverflow.
jmite
Pertanyaan ini memiliki beberapa jawaban di sini .
Anton Trunov
@ jmite Mengingat bahwa pertanyaan ini adalah tentang kalkulus konstruksi dengan Coq hanya berfungsi sebagai sintaksis konkret, saya pikir ini pada topik di sini.
Gilles 'SO- stop being evil'

Jawaban:

12

Coq memiliki 3 tipe "besar":

  • Propp1,p2:Pp1=p2
  • Set1=2Set
  • Type adalah supertype dari keduanya, memungkinkan Anda untuk menulis kode setelah itu bekerja dengan baik

Saya cukup yakin kesalahan Anda karena Anda mendefinisikan Setparameter yang bisa Type, yang artinya bisa Prop, yang tidak diizinkan. Jika Anda mengubah ini:

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

kode Anda harus berfungsi.

Ya ampun
sumber
3
Coq tidak memiliki bukti yang tidak relevan Propkecuali Anda menambahkannya sebagai aksioma.
Geoff