Perform `fast_done` first in `naive_solver`.

Merged Robbert Krebbers requested to merge ci/robbert/naive_solver into master

This avoids naive_solver tearing whole goals apart, even if the goal appears exactly as a hypothesis.

In Iris/C I ran into this problem after the recent set_solver changes (4ff965b2). Since set_unfold unfolds more stuff than it used to do, naive_solver essentially had to solve P → P. However, since it was tearing the entire goal apart, and trying to reestablish it while there were other assumptions in the context that influenced instantiation of existentials, it was not able to solve P again. By performing fast_done eagerly, it will not simply solve P → P immediately without tearing the entire goal apart.

It appears that the impact on e.g. LambdaRust is in the noise range:*&var-metric=instructions

Edited by Robbert Krebbers

Merge request reports