Avoid circular dependencies for justifying reductions in strings extf eval (#4415)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Wed, 29 Apr 2020 18:02:02 +0000 (13:02 -0500)
committerGitHub <noreply@github.com>
Wed, 29 Apr 2020 18:02:02 +0000 (11:02 -0700)
commit22c36b3bceb5d1a73dc0f0355c0a01703db51acc
tree529b8ef5a7967628742629b3322255090ed0933c
parent14a7be2b6fe6eb5b938927e20d275fe5c49db55e
Avoid circular dependencies for justifying reductions in strings extf eval (#4415)

An incorrect answer of "sat" could be found after 8 seconds on the given benchmark (with --strings-fmf) due to a circular justification for why an extended function was reduced. In particular, we ran checkExtfInference on the same term twice and then marked it as reduced since we had already seen it. This makes the code more conservative.

Notice I'm making the code doubly conservative in case there is any chance for duplication again (e.g. if ExtTheory provides duplicate terms).
src/theory/strings/extf_solver.cpp
test/regress/CMakeLists.txt
test/regress/regress3/strings/unsat-circ-reduce.smt2 [new file with mode: 0644]