summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS5
-rw-r--r--src/options/smt_options.toml2
-rw-r--r--src/smt/set_defaults.cpp13
-rw-r--r--src/smt/smt_engine.cpp4
-rw-r--r--test/regress/regress1/strings/strings-leq-trans-unsat.smt22
-rw-r--r--test/regress/regress2/nl/ufnia-factor-open-proof.smt21
6 files changed, 17 insertions, 10 deletions
diff --git a/NEWS b/NEWS
index 1aeac83da..26e0edbb6 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,11 @@ Changes since 1.8
=================
New Features:
+
+* New unsat-core production modes based on the new proof infrastructure
+ (`--unsat-cores-mode=sat-proof`) and on the solving-under-assumption feature
+ of Minisat (`--unsat-cores-mode=assumptions`). The mode based on SAT
+ assumptions + preprocessing proofs is the new default.
* A new parametric theory of sequences whose syntax is compatible with the
syntax for sequences used by Z3.
* Arrays: Added support for an `eqrange` predicate. `(eqrange a b i j)` is true
diff --git a/src/options/smt_options.toml b/src/options/smt_options.toml
index 733c2239c..ddffe8c12 100644
--- a/src/options/smt_options.toml
+++ b/src/options/smt_options.toml
@@ -187,7 +187,7 @@ name = "SMT Layer"
category = "regular"
long = "produce-unsat-cores"
type = "bool"
- help = "turn on unsat core generation"
+ help = "turn on unsat core generation. Unless otherwise specified, cores will be produced using SAT soving under assumptions and preprocessing proofs."
[[option]]
name = "unsatCoresMode"
diff --git a/src/smt/set_defaults.cpp b/src/smt/set_defaults.cpp
index 7c5d775ed..be19923af 100644
--- a/src/smt/set_defaults.cpp
+++ b/src/smt/set_defaults.cpp
@@ -80,9 +80,9 @@ void setDefaults(LogicInfo& logic, bool isInternalSubsolver)
if (opts.wasSetByUser(options::unsatCoresMode))
{
Notice()
- << "Overriding OFF unsat-core mode since cores were requested..\n";
+ << "Overriding OFF unsat-core mode since cores were requested.\n";
}
- opts.set(options::unsatCoresMode, options::UnsatCoresMode::OLD_PROOF);
+ opts.set(options::unsatCoresMode, options::UnsatCoresMode::ASSUMPTIONS);
}
if (options::checkProofs() || options::dumpProofs())
@@ -352,7 +352,6 @@ void setDefaults(LogicInfo& logic, bool isInternalSubsolver)
|| options::sygusInference() || options::sygusRewSynthInput())
{
// since we are trying to recast as sygus, we assume the input is sygus
- isSygus = true;
usesSygus = true;
}
else if (options::sygusInst())
@@ -397,7 +396,7 @@ void setDefaults(LogicInfo& logic, bool isInternalSubsolver)
opts.set(options::unsatCores, true);
if (options::unsatCoresMode() == options::UnsatCoresMode::OFF)
{
- opts.set(options::unsatCoresMode, options::UnsatCoresMode::OLD_PROOF);
+ opts.set(options::unsatCoresMode, options::UnsatCoresMode::ASSUMPTIONS);
}
}
@@ -415,9 +414,11 @@ void setDefaults(LogicInfo& logic, bool isInternalSubsolver)
}
// whether we want to force safe unsat cores, i.e., if we are in the OLD_PROOF
- // unsat core mode, since new ones are experimental
+ // unsat core mode or ASSUMPTIONS, the new default, since other ones are
+ // experimental
bool safeUnsatCores =
- options::unsatCoresMode() == options::UnsatCoresMode::OLD_PROOF;
+ options::unsatCoresMode() == options::UnsatCoresMode::OLD_PROOF
+ || options::unsatCoresMode() == options::UnsatCoresMode::ASSUMPTIONS;
// Disable options incompatible with incremental solving, unsat cores or
// output an error if enabled explicitly. It is also currently incompatible
diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp
index 67273f854..0e1ff8878 100644
--- a/src/smt/smt_engine.cpp
+++ b/src/smt/smt_engine.cpp
@@ -1394,8 +1394,8 @@ UnsatCore SmtEngine::getUnsatCoreInternal()
if (!d_env->getOption(options::unsatCores))
{
throw ModalException(
- "Cannot get an unsat core when produce-unsat-cores[-new] or "
- "produce-proofs option is off.");
+ "Cannot get an unsat core when produce-unsat-cores or produce-proofs "
+ "option is off.");
}
if (d_state->getMode() != SmtMode::UNSAT)
{
diff --git a/test/regress/regress1/strings/strings-leq-trans-unsat.smt2 b/test/regress/regress1/strings/strings-leq-trans-unsat.smt2
index de3946ef0..a97863d7d 100644
--- a/test/regress/regress1/strings/strings-leq-trans-unsat.smt2
+++ b/test/regress/regress1/strings/strings-leq-trans-unsat.smt2
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --strings-exp
+; COMMAND-LINE: --strings-exp --no-check-unsat-cores
; EXPECT: unsat
(set-logic QF_SLIA)
(set-info :status unsat)
diff --git a/test/regress/regress2/nl/ufnia-factor-open-proof.smt2 b/test/regress/regress2/nl/ufnia-factor-open-proof.smt2
index bcb077f4f..6d910b464 100644
--- a/test/regress/regress2/nl/ufnia-factor-open-proof.smt2
+++ b/test/regress/regress2/nl/ufnia-factor-open-proof.smt2
@@ -1,3 +1,4 @@
+; COMMAND-LINE: --no-check-unsat-cores
(set-logic QF_UFNIA)
(set-info :status unsat)
(declare-fun pow2 (Int) Int)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback