d4b08fcf96
Unification constraints of the form ctx |- ?m[inst:i v] == T and ctx |- (?m a1 ... an) == T are delayed by elaborator because the produce case-splits. On the other hand, the step that puts terms is head-normal form is eagerly applied. This is a bad idea for constraints like the two above. The elaborator will put T in head normal form before executing process_meta_app and process_meta_inst. This is just wasted work, and creates fully unfolded terms for solvers and provers. The new test demonstrates the problem. In this test, we mark several terms as non-opaque. Without this commit, the produced goal is a huge term. Signed-off-by: Leonardo de Moura <leonardo@microsoft.com> |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
elaborator.cpp | ||
elaborator.h | ||
elaborator_exception.h | ||
elaborator_justification.cpp | ||
elaborator_justification.h | ||
elaborator_plugin.h |