idris中是否有模数函数?

时间:2016-03-07 13:36:30

标签: idris

在Haskell中,有modrem函数。 Idris中是否有类似的功能,尤其是Nat上的定义?

1 个答案:

答案 0 :(得分:3)

Prelude.Nat中有

modNatNZ : Nat -> (y : Nat) -> Not (y = 0) -> Nat
modNat   : Nat -> Nat -> Nat

第一个需要证明除数不为零,而第二个是部分的(即可以在运行时崩溃)。实际上还有一个证据,

SIsNotZ : {x: Nat} -> Not (S x = Z)

继任者不能为零。因此,您只需使用modNatNZ 10 3 SIsNotZ,统一系统就会证明Not (3 = 0)。您可以看到modNatNZ的工作原理here。由于Nat始终为正,因此余数函数的行为相同。

否则,通用

mod : Integral ty => ty -> ty -> ty

是为实现Integral的所有类型定义的(例如Int)。