summaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorAina Niemetz <aina.niemetz@gmail.com>2019-08-19 15:10:04 -0700
committerGitHub <noreply@github.com>2019-08-19 15:10:04 -0700
commit16c2fe5ec2ebb29da131aa590a4a0b79b1e94dc9 (patch)
tree4df2aca80a941a215e7c29f631d94a6c714eded7 /src/api
parentb1e9c6b7f5e4beb0183e48f5a1cbbf679f52d7d7 (diff)
New C++ API: Add checks for Solver::checkValid and Solver::checkValidAssuming. (#3197)
Diffstat (limited to 'src/api')
-rw-r--r--src/api/cvc4cpp.cpp48
1 files changed, 40 insertions, 8 deletions
diff --git a/src/api/cvc4cpp.cpp b/src/api/cvc4cpp.cpp
index b29d6a26f..904da0f10 100644
--- a/src/api/cvc4cpp.cpp
+++ b/src/api/cvc4cpp.cpp
@@ -38,12 +38,14 @@
#include "base/cvc4_check.h"
#include "expr/expr.h"
#include "expr/expr_manager.h"
+#include "expr/expr_manager_scope.h"
#include "expr/kind.h"
#include "expr/metakind.h"
#include "expr/node_manager.h"
#include "expr/type.h"
#include "options/main_options.h"
#include "options/options.h"
+#include "options/smt_options.h"
#include "smt/model.h"
#include "smt/smt_engine.h"
#include "theory/logic_info.h"
@@ -3084,33 +3086,61 @@ Term Solver::simplify(const Term& t)
{
CVC4_API_SOLVER_TRY_CATCH_BEGIN;
CVC4_API_ARG_CHECK_NOT_NULL(t);
+
return d_smtEngine->simplify(*t.d_expr);
+
CVC4_API_SOLVER_TRY_CATCH_END;
}
Result Solver::checkValid(void) const
{
- // CHECK:
- // if d_queryMade -> incremental enabled
+ CVC4_API_SOLVER_TRY_CATCH_BEGIN;
+ CVC4::ExprManagerScope exmgrs(*(d_exprMgr.get()));
+ CVC4_API_CHECK(!d_smtEngine->isQueryMade()
+ || CVC4::options::incrementalSolving())
+ << "Cannot make multiple queries unless incremental solving is enabled "
+ "(try --incremental)";
+
CVC4::Result r = d_smtEngine->query();
return Result(r);
+
+ CVC4_API_SOLVER_TRY_CATCH_END;
}
Result Solver::checkValidAssuming(Term assumption) const
{
- // CHECK:
- // if assumptions.size() > 0: incremental enabled?
+ CVC4_API_SOLVER_TRY_CATCH_BEGIN;
+ CVC4::ExprManagerScope exmgrs(*(d_exprMgr.get()));
+ CVC4_API_CHECK(!d_smtEngine->isQueryMade()
+ || CVC4::options::incrementalSolving())
+ << "Cannot make multiple queries unless incremental solving is enabled "
+ "(try --incremental)";
+ CVC4_API_ARG_CHECK_NOT_NULL(assumption);
+
CVC4::Result r = d_smtEngine->query(*assumption.d_expr);
return Result(r);
+
+ CVC4_API_SOLVER_TRY_CATCH_END;
}
Result Solver::checkValidAssuming(const std::vector<Term>& assumptions) const
{
- // CHECK:
- // if assumptions.size() > 0: incremental enabled?
+ CVC4_API_SOLVER_TRY_CATCH_BEGIN;
+ CVC4::ExprManagerScope exmgrs(*(d_exprMgr.get()));
+ CVC4_API_CHECK(!d_smtEngine->isQueryMade()
+ || CVC4::options::incrementalSolving())
+ << "Cannot make multiple queries unless incremental solving is enabled "
+ "(try --incremental)";
+ for (const Term& assumption : assumptions)
+ {
+ CVC4_API_ARG_CHECK_NOT_NULL(assumption);
+ }
+
std::vector<Expr> eassumptions = termVectorToExprs(assumptions);
CVC4::Result r = d_smtEngine->query(eassumptions);
return Result(r);
+
+ CVC4_API_SOLVER_TRY_CATCH_END;
}
/* SMT-LIB commands */
@@ -3556,7 +3586,8 @@ std::vector<Term> Solver::getValue(const std::vector<Term>& terms) const
void Solver::pop(uint32_t nscopes) const
{
CVC4_API_SOLVER_TRY_CATCH_BEGIN;
- CVC4_API_CHECK(d_smtEngine->getOption("incremental").toString() == "true")
+ CVC4::ExprManagerScope exmgrs(*(d_exprMgr.get()));
+ CVC4_API_CHECK(CVC4::options::incrementalSolving())
<< "Cannot pop when not solving incrementally (use --incremental)";
CVC4_API_CHECK(nscopes <= d_smtEngine->getNumUserLevels())
<< "Cannot pop beyond first pushed context";
@@ -3581,7 +3612,8 @@ void Solver::printModel(std::ostream& out) const
void Solver::push(uint32_t nscopes) const
{
CVC4_API_SOLVER_TRY_CATCH_BEGIN;
- CVC4_API_CHECK(d_smtEngine->getOption("incremental").toString() == "true")
+ CVC4::ExprManagerScope exmgrs(*(d_exprMgr.get()));
+ CVC4_API_CHECK(CVC4::options::incrementalSolving())
<< "Cannot push when not solving incrementally (use --incremental)";
for (uint32_t n = 0; n < nscopes; ++n)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback