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.
This PR reworks substantial parts of the EL-to-IL elaborator. Most importantly, it replaces the previous ad-hoc uses of backtracking with a more systematic approach that allows more programs to type-check as expected. Error messages now provide information about which alternatives have been tried.
In IL and AL, the PR adds an expression form
LiftE e
, which lifts at?
to at*
.The PR also introduces a new EL expression form
[e]
for expressing lists. It is equivalent to a singletone
implicitly injected into list type, but with more restrictive type checking. It can be use to disambiguate multi-nested expressions in a way that was previously impossible. For example, a[i*]* : nat**
can now be distinguished from[i]** : nat**
.I'd like to do further improvements and clean-ups as follow-ups, but this PR should be useful already.