2016-03-07 48 views

回答

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 

被用於實現積分(例如強度)所有類型的定義。

+0

下面是固定到某個提交的modNatNZ的鏈接:https://github.com/idris-lang/Idris-dev/blob/88e7beac09de1c5eba155c571ed7c50ced8cb130/libs/prelude/Prelude/Nat.idr#L316 – Langston