私は、AgdaとCoqの間の紛らわしい不一致に出くわしました。これは、型理論間の最もよく知られている区別(たとえば、(im)predicativity、帰納再帰など)に明らかに関連していません。
特に、Agdaは次の定義を受け入れています。
data Ty : Set0 -> Set0 where
c1 : Ty ℕ
c2 : Ty (Ty ℕ)
一方、c2での[Ty _]自体のインデックスとしての出現は、厳密な陽性に違反すると見なされるため、同等のCoq定義は拒否されます。
Inductive Ty : Set -> Set :=
| c1 : Ty nat
| c2 : Ty (Ty nat).
実際、このケースは、厳密な積極性に違反するCoq'Artセクション14.1.2.1の例のほぼ逐語的な例です。
Inductive T : Set -> Set := c : (T (T nat)).
しかし、型理論のこの違いの理由はわかりません。コンストラクター引数で型の負の出現を使用してFalseを証明する古典的な例は私には明らかですが、このスタイルのインデックス付けから矛盾を導き出す方法はわかりません(厳密に正のコンストラクター引数に関係なく)。
Dybjerの初期の帰納的家族の論文は、文献をざっと見て、CID論文のPaulin-Mohringの解法にわずかに異なる制限があることについて、一言コメントを述べています。Dybjerの論文はこれを許可しているようだが、Paulin-Mohringの論文は明らかにそれを禁止している。
どうやらこの意見の違いに気付くのは私が初めてではなく、この定義はどちらのシステム(https://lists.chalmers.se/pipermail/agda/2012/004249.html)でも許可されるべきではないと考える人もいますが、あるシステムでは健全であるが他のシステムでは健全ではない理由、または単に意見の相違がある理由についての説明は見つかりませんでした。
だから私はいくつかの質問があると思う:
- これは単調な例ですが、厳密に肯定的なタイプではありませんか?(Coqでは、明らかにAgdaはそれを厳密にポジティブとみなします)
- Coqが拒否するのに、なぜAgdaはこれを許可するのですか?「厳密にポジティブ」の解釈における単なる特異な違いです。CoqとAgdaの間に微妙な違いがあり、Agdaで聞こえ、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.