Consider negation's proof before triggering arith pfs. (#4776)
authorAlex Ozdemir <aozdemir@hmc.edu>
Mon, 27 Jul 2020 17:20:07 +0000 (10:20 -0700)
committerGitHub <noreply@github.com>
Mon, 27 Jul 2020 17:20:07 +0000 (10:20 -0700)
commitd5141e4086898bb66809c76d4614503e3a2efd6e
treecb611ef5c355a10f291b130a06a608a453c991c9
parentffed1a0c2da3c28ce910f1a19462ffa771c5b252
Consider negation's proof before triggering arith pfs. (#4776)

The current arith proof machinery can prove conflicts which are
explained by assumptions and tightened assumptions.

Previously we verified that the conflict constraint was explained in
terms of assumptions and tightened assumptions, before trying to
save/produce a proof.

We did not verify that the negated constraint was an assumption or
tightened assumption.

This caused us to attempt to prove conflicts around constraints whose
negations where proven by general means (in the case of #4714, by the
equality engine), which the proof machinery was not prepared to handle.

This PR also checks that the negate constraint is an assumption or
tightened assumption, before saving the proof.

Thanks, Gereon, for doing the initial investigation into this!

fixes 4714

Co-authored-by: Gereon Kremer <nafur42@gmail.com>
src/theory/arith/constraint.cpp
src/theory/arith/constraint.h
src/theory/arith/theory_arith_private.cpp
test/regress/CMakeLists.txt
test/regress/regress3/issue4714.smt2 [new file with mode: 0644]