Следующая функция компилируется:Понимание `к: Nat ** 5 * к = n` Подпись
onlyModByFive : (n : Nat) -> (k : Nat ** 5 * k = n) -> Nat
onlyModByFive n k = 100
Но что k
представляет с синтаксисом Nat ** 5 * k = n
?
Также, как я могу назвать это? Вот что я пробовал, но я не понимаю выход.
*Test> onlyModByFive 5 5
When checking an application of function Main.onlyModByFive:
(k : Nat ** plus k (plus k (plus k (plus k (plus k 0)))) = 5) is not a
numeric type
источник ответа - https://groups.google.com/d/msg/idris-lang/ZPi9wCd95FY/eo3tRijGAAAJ
Спасибо, кактус. Но я думаю, что мой def 'onlyModByFive' недействителен, поскольку он вообще не включает' mod', нет? Я спросил об этом: http://stackoverflow.com/questions/36531852/function-to-determine-if-nat-is-divisible-by-5-at-compile-time. –
Кроме того - не могли бы вы рекомендовать какие-либо показания к доказательству «Refl», которые вы указали? –
@KevinMeredith вы можете начать с чтения http://jozefg.bitbucket.org/posts/2014-08-06-equality.html и отмечая, что здесь мы говорим об интенсиональном пропозициональном равенстве. – Cactus