我偶然发现了Agda和Coq之间一个令人困惑的分歧,这显然与它们的类型理论之间最众所周知的区别(例如(im)预测性,归纳递归等)没有关系。
特别是,Agda接受以下定义:
data Ty : Set0 -> Set0 where
c1 : Ty ℕ
c2 : Ty (Ty ℕ)
而等效的Coq定义则被拒绝,因为[Ty _]作为c2中其自身的索引的出现被认为违反了严格的积极性。
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的早期归纳性家庭论文在文献中四处寻找,对Paulin-Mohring在CID论文中的解决方案提出了副手评论,该方案的限制略有不同,并且隐约地暗示了这些差异可能与易混淆性有关,但不再赘述。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.