Mengapa Agda dan Coq tidak setuju pada kepositifan yang ketat?

24

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:

  1. Apakah ini contoh tipe monoton, tetapi non-ketat-positif? (Dalam Coq; jelas Agda menganggapnya sangat positif)
  2. 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?
  3. 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.

Colin Gordon
sumber
1
Sejauh yang saya tahu, Coq lebih ketat daripada yang dibolehkan oleh teori yang mendasarinya, karena lebih mudah diimplementasikan dan cukup berguna dalam praktik. Jawaban tentang kasus yang berbeda namun terkait ini sejauh pemahaman saya.
Gilles 'SANGAT berhenti menjadi jahat'
1
Definisi ini tidak diterima oleh versi dev Agda saat ini:Ty is not strictly positive, because it occurs in an index of the target type of the constructor c2 in the definition of Ty.
gallais
2
Ya, Anda benar, orang lain menunjukkan hal ini kepada saya tadi malam. Saya telah menggunakan paket 2.3.0.1 Debian, tetapi 2.3.2.1 dari Cabal menolak definisi langsung dan IR. Sepertinya bug yang tampaknya tidak terkait membuat positif memeriksa indeks lebih ketat: code.google.com/p/agda/issues/detail?id=690 Karena itu dibahas dalam daftar tanpa secara eksplisit ditandai masalah kesehatan, saya masih bertanya-tanya apakah tipenya sendiri adalah suara.
Colin Gordon

Jawaban:

10

Masalahnya tampaknya kebingungan akibat pertemuan dua faktor:

  1. Saya menggunakan versi basi dari Agda (2.3.0.1). Tampaknya sebelum 2.3.2, Agda tidak mengecek positif positif indeks hasil konstruktor (lihat bug yang saya tautkan di tempat lain di utas).
  2. Bacaan lebih dekat dari makalah Dybjer's Inductive Families menunjukkan bahwa ia mungkin bermaksud bahwa tipe induktif yang didefinisikan tidak terikat ketika mengetik indeks hasil konstruktor . Bagian 3.2.1 memberikan skema untuk konstruktor induktif dalam prosa, dan tampaknya saya salah membaca bahasa yang menggambarkan lingkungan yang mengikat dari setiap bagian dari skema.

Bacaan yang lebih dekat ini tentu saja konsisten dengan pemeriksaan yang dilakukan Coq dan (versi terbaru) Agda, yang melarang tampilan T dalam indeksnya sendiri.

Colin Gordon
sumber
4

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

Alat Coq mendukung flag-line flag -impredicative-set, yang memodifikasi Gallina dengan cara yang lebih mendasar dengan membuat Set impredicative. Sebuah istilah seperti forall T: Set, T memiliki tipe Set, dan definisi induktif dalam Set dapat memiliki konstruktor yang mengukur argumen apa pun. Untuk menjaga konsistensi, pembatasan eliminasi harus diberlakukan, sama halnya dengan pembatasan Prop. Pembatasan hanya berlaku untuk tipe induktif yang besar, di mana beberapa konstruktor mengkuantifikasi jenis tipe tipe. Dalam kasus seperti itu, nilai dalam tipe induktif ini hanya dapat disesuaikan dengan pola untuk menghasilkan tipe hasil yang tipenya adalah Set atau Prop. Aturan ini kontras dengan aturan untuk Prop, di mana pembatasan berlaku bahkan untuk tipe induktif non-besar, dan di mana tipe hasil hanya memiliki tipe Prop. Dalam versi Coq yang lama, Set secara impredikatif. Versi selanjutnya membuat Tetapkan predikatif untuk menghindari inkonsistensi dengan beberapa aksioma klasik. Secara khusus, orang harus berhati-hati ketika menggunakan Set impredikatif dengan aksioma pilihan. Dalam kombinasi dengan ekstensionalitas menengah atau predikat yang dikecualikan, inkonsistensi dapat terjadi. Set Impredikatif dapat berguna untuk memodelkan konsep matematika yang secara inheren impredikatif, tetapi hampir semua perkembangan Coq berjalan dengan baik tanpa itu.

Carter Tazio Schonwald
sumber
Dari suara perbaikan bug yang saya temukan di atas, sepertinya Agda tidak memeriksa positif indeks untuk hasil konstruktor. Yang sebenarnya tidak menunjukkan apakah tipe yang saya usulkan dalam monoton, tetapi menyarankan itu tidak terkait dengan impredicativity.
Colin Gordon
2
Dan ya, -impredicative-set membuat Set impredicative dalam Coq.
Colin Gordon