Use a typeclass for non informative types #27
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.
This removes the built-in knowledge of non-informative types that is present in the checker, and instead encodes this property via a typeclass. When the checker needs to construct a "non_informative_witness" for a type, essentially a revealing function, instead of applying some built-in rules it can now just call the typeclass resolution tactic, via the new
call_subtac
primitive (FStarLang/FStar#3226), obtaining both the dictionary for the constraint and a proof of its well-typing.All examples work as before (and importantly #11 still works, since the resolution tactic does not need to re-check its goal). Also a big chunk of checker about derivations of non_informative constraints is now gone: we basically get the derivation for free from the
call_subtac
invocation.The main advantage is that non-informative types are now open, and any user can add a type to the class.