Using Cactus\'s helpful answer, I tried to write a function that, given a Nat
, will return that Nat
if it\'s divisible by 5
.
This case it is a bit odd: the Integral
implementation of Nat
is:
partial
Integral Nat where
div = divNat
mod = modNat
And if you use modNat
instead of mod
in your type signature, it works. The type unifier is still having some issues. I guess it does not resolve further, because it sees the implementation as partial and not as total.
However, your onlyModBy5Helper
isn't exactly doing what you try to achieve, as onlyModBy5Helper 4 (10 ** Refl)
would return 4
, as n
and k
of the dependent pair don't need to be the same value. This function, that takes a n : Nat
and a proof for the n
, is probably what you want:
onlyModBy5Helper : (n : Nat) -> n `modNat` 5 = 0 -> Nat
onlyModBy5Helper n prf = n
Note that this resembles a dependent pair, and you could (but shouldn't, as it adds unneeded abstraction), write the function as:
onlyModBy5Helper : (n : Nat ** n `modNat` 5 = 0) -> Nat
onlyModBy5Helper pair = fst pair