|
| 1 | +- **Changed:** |
| 2 | + :cmd:`Hint Unfold` in discriminated databases now respects its |
| 3 | + specification, namely that a constant may be unfolded only when |
| 4 | + it is the head of the goal. The previous behavior was to perform |
| 5 | + unfolding on any goal, without any limitation. |
| 6 | + |
| 7 | + An unexpected side-effect of this was that a database that |
| 8 | + contained ``Unfold`` hints would sometimes trigger silent |
| 9 | + strong βι-normalization of the goal. Indeed, :tacn:`unfold` |
| 10 | + performs such a normalization regardless of the presence of its |
| 11 | + argument in the goal. This does introduce a bit of backwards |
| 12 | + incompatibility, but it occurs in very specific situations |
| 13 | + and is easily circumvented. Since by default hint bases |
| 14 | + are not discriminated, it means that incompatibilities are |
| 15 | + typically observed when adding unfold hints to the typeclass |
| 16 | + database. |
| 17 | + |
| 18 | + In order to recover the previous behavior, it is enough |
| 19 | + to replace instances of ``Hint Unfold foo.`` |
| 20 | + with ``Hint Extern 4 => progress (unfold foo).``. A less compatible but |
| 21 | + finer-grained change can be achieved by only adding the missing normalization |
| 22 | + phase with ``Hint Extern 4 => progress (lazy beta iota).``. |
| 23 | + (`#14679 <https://github.com/coq/coq/pull/14679>`_, |
| 24 | + fixes `#14874 <https://github.com/coq/coq/issues/14874>`_, |
| 25 | + by Pierre-Marie Pédrot). |
0 commit comments