Fixes cases of satisfiable unsat cores when proofs are enabled.
Unfortunately, this bug was also preventing us from doing the final scope check for all proof checking. As this was not being tested, this PR uncovers that proof checking is now failing on 6 regressions. I'm disabling proof checking here and will address these issues on later PRs.
Trace("smt-proof") << "SmtEngine::setFinalProof(): make scope...\n";
// Now make the final scope, which ensures that the only open leaves of the
- // proof are the assertions, unless we are doing proofs to generate unsat
- // cores, in which case we do not care.
- d_finalProof = d_pnm->mkScope(pfn, assertions, !options::unsatCores());
+ // proof are the assertions.
+ d_finalProof = d_pnm->mkScope(pfn, assertions);
Trace("smt-proof") << "SmtEngine::setFinalProof(): finished.\n";
}
regress1/non-fatal-errors.smt2
regress1/parsing_ringer.cvc
regress1/proof00.smt2
+ regress1/proofs/issue6625-unsat-core-proofs.smt2
regress1/proofs/macro-res-exp-crowding-lit-inside-unit.smt2
regress1/proofs/macro-res-exp-singleton-after-elimCrowd.smt2
regress1/proofs/sat-trivial-cycle.smt2
+ regress1/proofs/unsat-cores-proofs.smt2
regress1/push-pop/arith_lra_01.smt2
regress1/push-pop/arith_lra_02.smt2
regress1/push-pop/bug-fmf-fun-skolem.smt2
+; COMMAND-LINE: --no-check-proofs
+; EXPECT: unsat
(set-option :incremental false)
(set-info :source "Hand-crafted bit-vector benchmarks. Some are from the SVC benchmark suite.
Contributed by Vijay Ganesh (vganesh@stanford.edu). Translated into SMT-LIB
+; COMMAND-LINE: --no-check-proofs
+; EXPECT: unsat
(set-option :incremental false)
(set-info :source "Hand-crafted bit-vector benchmarks. Some are from the SVC benchmark suite.
Contributed by Vijay Ganesh (vganesh@stanford.edu). Translated into SMT-LIB
+; COMMAND-LINE: --no-check-proofs
+; EXPECT: unsat
(set-logic QF_BV)
(set-info :smt-lib-version 2.6)
(set-info :category "crafted")
+; COMMAND-LINE: --no-check-proofs
; EXPECT: unsat
(set-logic QF_ALL_SUPPORTED)
(set-info :status unsat)
+% COMMAND-LINE: --no-check-proofs
% EXPECT: entailed
x_1 : BOOLEAN;
x_2 : BOOLEAN;
--- /dev/null
+; COMMAND-LINE: -i
+; EXPECT: unsat
+; EXPECT: unsat
+(set-logic ALL)
+(declare-const a String)
+(declare-const b String)
+(declare-const c String)
+(push)
+(assert (= (str.++ a b) c))
+(assert (= a "A"))
+(assert (= c ""))
+(check-sat)
+(pop)
+(assert (= (str.++ a b) (str.++ "A" c)))
+(assert (= c (str.++ a b)))
+(check-sat)
--- /dev/null
+; COMMAND-LINE: --produce-proofs -i
+; EXPECT: unsat
+; EXPECT: unsat
+(set-logic ALL)
+(push)
+(assert (= "A" ""))
+(check-sat)
+(pop)
+(assert (= "" "A"))
+(check-sat)
-; COMMAND-LINE: --incremental
+; COMMAND-LINE: --incremental --no-check-proofs
; EXPECT: sat
; EXPECT: sat
; EXPECT: unsat