ฉันพบความขัดแย้งที่สับสนระหว่าง Agda และ Coq ซึ่งไม่เกี่ยวข้องกับความแตกต่างที่รู้จักกันดีที่สุดระหว่างทฤษฎีประเภทของพวกเขา (เช่น (im) predicativity, induction-recursion, ฯลฯ )
โดยเฉพาะอย่างยิ่งคำจำกัดความต่อไปนี้ได้รับการยอมรับโดย Agda:
data Ty : Set0 -> Set0 where
c1 : Ty ℕ
c2 : Ty (Ty ℕ)
ในขณะที่คำจำกัดความ Coq ที่เท่าเทียมกันนั้นถูกปฏิเสธเนื่องจากรูปลักษณ์ของ [Ty _] เป็นดัชนีของตัวเองใน c2 นั้นถือว่าเป็นการละเมิด positivity ที่เข้มงวด
Inductive Ty : Set -> Set :=
| c1 : Ty nat
| c2 : Ty (Ty nat).
ในความเป็นจริงคดีนี้เกือบทุกตัวอย่างจาก Coq'Art หัวข้อ 14.1.2.1 ของการละเมิด positivity ที่เข้มงวด:
Inductive T : Set -> Set := c : (T (T nat)).
แต่ฉันไม่เห็นสาเหตุของความแตกต่างระหว่างทฤษฎีประเภทนี้ ตัวอย่างคลาสสิกของการพิสูจน์เท็จโดยใช้การลบประเภทในอาร์กิวเมนต์ตัวสร้างชัดเจนกับฉัน แต่ฉันไม่สามารถดูว่าใครจะได้รับความขัดแย้งจากรูปแบบของการทำดัชนีนี้ (โดยไม่คำนึงถึงข้อโต้แย้งเชิงบวกอย่างเคร่งครัดสร้าง)
เมื่อพูดถึงวรรณคดีบทความเกี่ยวกับครอบครัวอุปนัยยุคแรกของ Dybjer ได้แสดงความคิดเห็นอย่างฉับพลันเกี่ยวกับวิธีแก้ปัญหาของ Paulin-Mohring ในกระดาษ CID ซึ่งมีข้อ จำกัด ที่แตกต่างกันเล็กน้อยและแสดงให้เห็นถึงความแตกต่าง กระดาษของ Dybjer ดูเหมือนจะยอมให้สิ่งนี้ในขณะที่ Paulin-Mohring ห้ามอย่างชัดเจน
เห็นได้ชัดว่าฉันไม่ใช่คนแรกที่สังเกตเห็นความแตกต่างของความเห็นและบางคนเชื่อว่าคำจำกัดความนี้ไม่ควรได้รับอนุญาตในทั้งสองระบบ ( https://lists.chalmers.se/pipermail/agda/2012/004249.html ) แต่ ฉันไม่ได้พบคำอธิบายใด ๆ ว่าทำไมถึงเป็นเสียงในระบบใดระบบหนึ่ง แต่ไม่ใช่ระบบอื่นหรือเป็นเพียงความคิดเห็นที่แตกต่าง
ดังนั้นฉันคิดว่าฉันมีคำถามหลายข้อ:
- นี่เป็นตัวอย่างของเสียงเดียว แต่ไม่ใช่แบบบวกหรือไม่ (ใน Coq; Agda เห็นว่าเป็นบวกอย่างชัดเจน)
- เหตุใด Agda อนุญาตให้ทำเช่นนี้ในขณะที่ Coq ปฏิเสธ มันเป็นเพียงความแตกต่างที่แปลกประหลาดในการตีความของ "บวกอย่างเคร่งครัด" มีความแตกต่างเล็กน้อยระหว่าง Coq และ Agda ที่ทำให้ฟังใน Agda และ unsound ใน Coq หรือเป็นเรื่องของรสนิยมที่ขับเคลื่อนโดยการตั้งค่าตามทฤษฎีเฉพาะหรือไม่?
- มีความแตกต่างที่มีความหมายระหว่างคำจำกัดความแรกข้างต้นและคำจำกัดความอุปนัยแบบเรียกซ้ำ - ซ้ำด้านล่างหรือไม่?
คำนิยามอุปนัย - ซ้ำ:
mutual
data U : Set0 -> Set0 where
c : (i : Fin 2) -> U (T i)
T : Fin 2 -> Set0
T zero = ℕ
T (suc zero) = U ℕ
ฉันดีใจที่มีพอยน์เตอร์ไปยังวรรณกรรมที่เกี่ยวข้อง
ขอบคุณล่วงหน้า.
Ty is not strictly positive, because it occurs in an index of the target type of the constructor c2 in the definition of Ty.