La fonction suivante compile:`k: Nat ** 5 * k = n` Signature
onlyModByFive : (n : Nat) -> (k : Nat ** 5 * k = n) -> Nat
onlyModByFive n k = 100
Mais qu'est-ce que k
représente avec sa syntaxe Nat ** 5 * k = n
?
Aussi, comment puis-je l'appeler? Voici ce que j'ai essayé, mais je ne comprends pas la sortie.
*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
source de réponse - https://groups.google.com/d/msg/idris-lang/ZPi9wCd95FY/eo3tRijGAAAJ
Merci, Cactus. Mais je pense que mon def de 'onlyModByFive' est invalide puisqu'il n'implique pas' mod' du tout, non? J'ai demandé ce suivi: http://stackoverflow.com/questions/36531852/function-to-determine-if-nat-is-divisible-by-5-at-compile-time. –
Aussi - pourriez-vous s'il vous plaît recommander des lectures sur le 'Refl' lié à la preuve que vous aviez noté? –
@KevinMeredith vous pouvez commencer par lire http://jozefg.bitbucket.org/posts/2014-08-06-equality.html et notez que nous parlons ici d'égalité propositionnelle intensionnelle. – Cactus