In Lean 4, we have support for typing constraints of the form ``` (?m ...).1 =?= v ``` where the type of `?m ...` is a structure with a single field. This kind of constraint is reduced to `?m ... =?= ⟨v⟩` This feature is implemented by the function `isDefEqSingleton`. As far as I remember, Lean 3 does not implement this feature. This commit disables this feature if the structure is a class. The goal is to avoid the generation of counterintuitive instances by typing inference. For example, in the example at issue #2011, the following weird instance was being generated for `Zero (f x)` ``` (@Zero.mk (f x✝) ((@instZero I (fun i => f i) fun i => inst✝¹ i).1 x✝) ``` where `inst✝¹` is the local instance `[∀ i, Zero (f i)]` Note that this instance is definitinally equal to the expected nicer instance `inst✝¹ x✝`. However, the nasty instance trigger nasty unification higher order constraints later. Note that a few tests broke because different error messages were produced. The new error messages seem better. I do not expect this change to affect Mathlib4 since Lean 3 does not have this feature. |
||
|---|---|---|
| .. | ||
| bench | ||
| compiler | ||
| elabissues | ||
| ir | ||
| lean | ||
| pkg | ||
| playground | ||
| plugin | ||
| simpperf | ||
| .gitignore | ||
| common.sh | ||