Cactus продемонстрировал, как ответить на мой вопрос: Helper Function to Determine if Nat `mod` 5 == 0.Определить, равномерна ли сумма очков Vect n Nat's 5?
Он писал:
onlyModBy5 : (n : Nat) -> {auto prf : n `modNat` 5 = 0} -> Nat
onlyModBy5 n = n
Затем я попытался использовать эту функцию, чтобы применить onlyModBy5
на суммы Vect n Nat
«с.
foo : (n : Nat) -> Vect n Nat -> Nat
foo n xs = onlyModBy5 $ sum xs
Но я получил это ошибка времени компиляции:
When checking right hand side of foo with expected type
Nat
When checking argument prf to function Main.onlyModBy5:
Can't find a value of type
Prelude.Nat.modNatNZ, mod' (foldrImpl (\meth =>
\meth =>
plus meth meth)
0
id
xs)
4
SIsNotZ
(foldrImpl (\meth =>
\meth =>
plus meth meth)
0
id
xs)
(foldrImpl (\meth =>
\meth =>
plus meth meth)
0
id
xs)
4 =
0
Holes: Main.foo
Как я могу использовать выше onlyModBy5
функцию с foo
?
Я думаю, что вы можете немного улучшить 'foo', явно передав' prf' 'onlyModBy5 k', чтобы подчеркнуть тот факт, что именно здесь происходит доказательство. – Cactus