They were implemented in Idris 0.9.14 and I successfully used induction
for some proofs. However, they work only for some library types; while, for example, Vect
supports them, nearly-isomorphic All
does not:
-Main.h2> induction ys1 INTERNAL ERROR: induction needs an eliminator for Data.Vect.Quantifiers.All
This is probably a bug, or a missing error message.
Please consider reporting at https://github.com/idris-lang/Idris-dev/issues
Unfortunately there isn't plenty of language documentation, and I couldn't find how to implement elimination/case analysis for custom types. Digging into Prelude, I found the %elim
modifier, but it didn't help. Could anybody give an example for, say, the aforementioned All
?
The
induction
tactic can only be used on types that were declared with%elim
. Some people feel that Idris should be automatically generating eliminators whenever possible, but there would appear to be some technical difficulties with that.As far as I can tell, there should be no problem adding
%elim
to the definition ofAll
(just edit the fileQuantifiers.idr
and recompile idris). You may want to submit a pull request on Github.