add all-your-base exercise #46
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I had many doubts about the difficulty of this one.
This exercise is usually low medium in difficulty (4 or 5), but I made a point of setting arguments to dependent types that enforce restrictions, instead of checking for errors. This is usually more idiomatic and a strong point of Lean, because any invalid argument generates a compiler error and specifications are fully described by the type system.
The problem is that, in order to use those types, arguments must carry with themselves the proof of their validity. But proving things is very different from usual programming practice and more close to mathematics, so the difficulty should be raised to reflect this. But how much?
What do you think?