Saya telah menemukan ketidaksepakatan yang membingungkan antara Agda dan Coq yang tidak jelas terkait dengan perbedaan yang paling dikenal antara teori tipenya (misalnya, (im) predicativity, induksi rekursi, dll).
Secara khusus, definisi berikut diterima oleh Agda:
data Ty : Set0 -> Set0 where
c1 : Ty ℕ
c2 : Ty (Ty ℕ)
sedangkan definisi Coq yang ekivalen ditolak karena penampilan [Ty_] sebagai indeks itu sendiri dalam c2 dianggap melanggar kepositifan yang ketat.
Inductive Ty : Set -> Set :=
| c1 : Ty nat
| c2 : Ty (Ty nat).
Faktanya, kasus ini hampir merupakan kata demi kata dari Coq'Art Section 14.1.2.1 tentang pelanggaran terhadap sikap positif yang ketat:
Inductive T : Set -> Set := c : (T (T nat)).
Tetapi saya tidak melihat alasan perbedaan antara teori tipe ini. Contoh klasik membuktikan Salah menggunakan tipe negatif dalam argumen konstruktor jelas bagi saya, tapi saya tidak bisa melihat bagaimana orang dapat memperoleh kontradiksi dari gaya pengindeksan ini (terlepas dari argumen konstruktor positif lain).
Mengaduk-aduk literatur, makalah Dybjer awal Inductive Families membuat komentar begitu saja tentang solusi Paulin-Mohring dalam kertas CID memiliki batasan yang sedikit berbeda, dan samar-samar menunjukkan perbedaan mungkin terkait dengan impredicativity, tetapi tidak menguraikan lebih lanjut. Makalah Dybjer tampaknya memungkinkan ini, sementara Paulin-Mohring jelas melarangnya.
Tampaknya saya bukan orang pertama yang melihat perbedaan pendapat ini, dan beberapa percaya bahwa definisi ini tidak boleh diizinkan di kedua sistem ( https://lists.chalmers.se/pipermail/agda/2012/004249.html ), tetapi Saya belum menemukan penjelasan mengapa itu baik dalam satu sistem tetapi tidak pada yang lain, atau hanya perbedaan pendapat.
Jadi saya kira saya punya beberapa pertanyaan:
- Apakah ini contoh tipe monoton, tetapi non-ketat-positif? (Dalam Coq; jelas Agda menganggapnya sangat positif)
- Mengapa Agda mengizinkan ini sementara Coq menolaknya? Ini hanyalah perbedaan istimewa dalam penafsiran "benar-benar positif," adakah perbedaan halus antara Coq dan Agda yang membuatnya terdengar dalam Agda dan tidak sehat dalam Coq, atau apakah itu masalah selera yang didorong oleh preferensi teoretis tertentu?
- Apakah ada perbedaan yang bermakna antara definisi pertama di atas, dan definisi induktif-rekursif yang setara di bawah ini?
Definisi induktif-rekursif:
mutual
data U : Set0 -> Set0 where
c : (i : Fin 2) -> U (T i)
T : Fin 2 -> Set0
T zero = ℕ
T (suc zero) = U ℕ
Saya senang memiliki petunjuk untuk literatur yang relevan.
Terima kasih sebelumnya.
sumber
Ty is not strictly positive, because it occurs in an index of the target type of the constructor c2 in the definition of Ty.
Jawaban:
Masalahnya tampaknya kebingungan akibat pertemuan dua faktor:
Bacaan yang lebih dekat ini tentu saja konsisten dengan pemeriksaan yang dilakukan Coq dan (versi terbaru) Agda, yang melarang tampilan T dalam indeksnya sendiri.
sumber
Alasan yang mungkin untuk perbedaan itu, seperti yang Anda ungkapkan di bawah ini, adalah ketidaktepatan. Coq secara historis memiliki perangkat impredikatif (masih tersedia sebagai bendera, saya percaya!)
Mengutip buku Adam Chlipala http://adam.chlipala.net/cpdt/html/Universes.html
sumber