fix: FunInd: support structural recursion on reflexive types #4327
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.
types like
have a
.brecOn
only supports motives producingType u
, but notSort u
, but our induction principles produceProp
. So the previousimplementation of functional induction would fail for functions that
structurally recurse over such types.
We recognize this case now and, rather hazardously, replace
.brecOn
with
.binductionOn
(and thus.below
with.ibelow
andPProd
withAnd
). This assumes that these definitions are highly analogous.This also improves the error message when realizing a reserved name
fails with an exception, by prepending
to the error message.
Fixes #4320