Don't compare witnesses when deducing through FacetValue #5179
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.
As long as the types (FacetTypes) of the FacetValue match, any witnesses that are present should be accepted for deduce.
If the parameter's witnesses are concrete, the argument's will also be concrete and the exact same values. This is what we have relied on so far.
If the parameter's witnesses are symbolic, the argument may have either symbolic or concrete witnesses. If they are symbolic then they are equal. If they are concrete then they are not equal (and will fail deduction if compared. But the argument FacetValue with a concrete witness brings more information than the parameter has, and can be used in place of the parameter's FacetValue.
All FacetValues have some witness for every interface in the facet's type (FacetType), so there's no question of whether a witness is present or not between the parameter and argument.
This ensures that the deduction test with a nested FacetValue in a specific block continues to pass when generic witness resolution can produce a FacetValue with a symbolic witness in #5169.
See issue #5178 for more details.