dependent-type - 为什么不涉及 "mod"的相等性不在 Idris 中进行类型检查?

标签 dependent-type idris

为什么不进行以下类型检查:

v1 : mod 3 2 = 1
v1 = Refl

然而,这将很好地进行类型检查:
v2 : 3 - 2 = 1
v2 = Refl

最佳答案

这是由于 mod 的偏袒而发生的功能(感谢 @AntonTrunov 澄清)。它是多态的,默认数字常量是 Integer s。

Idris> :t mod
mod : Integral ty => ty -> ty -> ty
Idris> :t 3
3 : Integer
Idris> :t mod 3 2
mod 3 2 : Integer

对于 Integer类型 mod功能不全。

而是使用 modNatNZ 功能,因此所有类型都可以完美检查并正常工作。
v1 : modNatNZ 3 2 SIsNotZ = 1
v1 = Refl

关于dependent-type - 为什么不涉及 "mod"的相等性不在 Idris 中进行类型检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44672590/

相关文章:

functional-programming - 如何使用 Agda 中 N 的归纳原理证明 N 的递归定义方程在命题上成立?

haskell - 将存在主义提升到类型层面

types - Idris 中是否存在宇宙不一致的重要示例?

agda - 如何在 agda 中解释 REL

functional-programming - Idris 中依赖类型函数自动检测域

algorithm - 可证明正确的排列小于 O(n^2)

scala - 无法证明与路径相关类型的等效性

haskell - 单例的单例(在 Haskell 中模拟复杂的 pi 类型)

proof - idris 定义证明