Fix upwards closure for relations (#7515)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 1 Nov 2021 14:44:13 +0000 (09:44 -0500)
committerGitHub <noreply@github.com>
Mon, 1 Nov 2021 14:44:13 +0000 (14:44 +0000)
commit3bcc47a3c03f7bb1c3d00f0978296232b7e0aaf5
treef8757035f966a1b0ce72388d1ddb6dff7ee5302d
parentc8887627fab0a7f8395bb6434b624df028b8ef46
Fix upwards closure for relations (#7515)

This PR fixes an issue where we did compute upwards closure (for join, product, etc.) on equivalence classes whose membership cache had already been initialized (perhaps recursively from the computation of upwards/downwards closures on other terms).

It also generalizes the fix from #7511. Instead of doing explicit splitting, we mark shared terms and let theory combination (when necessary) do splitting. This is required to fix a more general version of the benchmark from the previous PR, where instead now a term c+1 is used in a position that is relevant to a join.

It disables a regression that times out after these fixes, and does further cleanup.
src/theory/inference_id.cpp
src/theory/inference_id.h
src/theory/sets/theory_sets_rels.cpp
src/theory/sets/theory_sets_rels.h
test/regress/CMakeLists.txt
test/regress/regress1/rels/qgu-fuzz-relations-2.smt2 [new file with mode: 0644]
test/regress/regress1/rels/qgu-fuzz-relations-3-upwards.smt2 [new file with mode: 0644]