[proofs] [sat] Make SAT assumption bookeeping robust to incremental (#8536)
authorHaniel Barbosa <hanielbbarbosa@gmail.com>
Mon, 4 Apr 2022 14:12:39 +0000 (11:12 -0300)
committerGitHub <noreply@github.com>
Mon, 4 Apr 2022 14:12:39 +0000 (14:12 +0000)
commit895bf2273d3e9baa89d4a6de174e7789f2ab71af
tree13b44b508bc542a996032f5d06663843a4d5ea75
parent7841167c829fe524b350f7c1b05647e13aac59be
[proofs] [sat] Make SAT assumption bookeeping robust to incremental (#8536)

Similarly to what happened with proofs of optimized SAT clauses getting lost (in the sense of inserted at lower assertion levels than the current one, during incremental solving), we need to make the bookeeping of the current SAT assumptions in the SAT proof manager robust to context popping. Not doing so can break the final proof construction, which relies on this information. A regression is added which showed the issue via the openness of a step added to the lazy proof chain (even though this did not lead to issues in the final proof).

This commit extends the OptimizedClausesManager to also optionally track a hash set of nodes to have nodes added to it during popping. This is hooked in the SAT proof manager to the SAT assumptions hash set.

There are four instances of notifications to the SAT proof manager of SAT assumptions: two in the proof CNF stream and two in the SAT solver. We only need to worry about the proof CNF stream ones, since the SAT solver ones are for literals (which do
not have assertion levels) and for some cases of the final conflict clause generated, which is always at the current assertion level. For the proof CNF stream ones it suffices to notify the SAT proof manager when the CNF stream itself is notified that a propagation or clause was inserted at an optimized level, as these are the only possible cases.
src/prop/opt_clauses_manager.cpp
src/prop/opt_clauses_manager.h
src/prop/proof_cnf_stream.cpp
src/prop/sat_proof_manager.cpp
src/prop/sat_proof_manager.h
test/regress/cli/CMakeLists.txt
test/regress/cli/regress0/proofs/tricky-sat-assumption-incremental-bookeeping.smt2 [new file with mode: 0644]