IdrisDoc: Data.Nat.DivMod

Data.Nat.DivMod

Euclidean division using primitive recursion/induction.

stepLT : (mLten : LTE m n) -> Either (m = n) (LT m n)

Given a number less than or equal to a bound, is it equal, or less?

n

the greater or equal number

m

the lesser or equal number

mLten

proof that m is less than or equal to n

divMod : (dividend : Nat) -> (predDivisor : Nat) -> DivMod dividend (S predDivisor)

Euclidean division. Note that this takes the predecessor of the divisor to
avoid division by zero.

dividend

the dividend

predDivisor

the predecessor of the desired divisor

ZDivModSn : DivMod 0 (S n)

The base case, dividing zero by a successor.

n

the predecessor of the divisor

SmDivModn : (hyp : DivMod m n) -> DivMod (S m) n

The inductive step, taking a division of m to a division of S m

n

the divisor

m

the dividend in the inductive hypothesis

hyp

the inductive hypothesis

data DivMod : (dividend : Nat) -> (divisor : Nat) -> Type

The result of euclidean division of natural numbers

dividend

the dividend

divisor

the divisor

MkDivMod : (quotient : Nat) -> (remainder : Nat) -> (remainderSmall : LT remainder divisor) -> DivMod (remainder + quotient * divisor) divisor

The result of division. The order of operations and operands in the
result type was picked to not require any explicit proofs.

divisor

the divisor

quotient

the quotient

remainder

the remainder

remainderSmall

proof that the remainder is in the range
[0 .. divisor - 1]