Browse Source
Progress in smtrat-smtsolver interface
Progress in smtrat-smtsolver interface
Former-commit-id: 2cee8a4968
tempestpy_adaptions
sjunges
10 years ago
2 changed files with 157 additions and 0 deletions
@ -0,0 +1,107 @@ |
|||
#include "src/solver/SmtratSmtSolver.h"
|
|||
#include "src/utility/macros.h"
|
|||
#include "src/exceptions/NotSupportedException.h"
|
|||
#include "src/exceptions/InvalidStateException.h"
|
|||
|
|||
#ifdef STORM_HAVE_SMTRAT
|
|||
#include "lib/smtrat.h"
|
|||
#endif
|
|||
|
|||
namespace storm { |
|||
namespace solver { |
|||
|
|||
|
|||
SmtratSmtSolver::SmtratSmtSolver(storm::expressions::ExpressionManager& manager) : SmtSolver(manager) |
|||
{ |
|||
#ifndef STORM_HAVE_SMTRAT
|
|||
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "StoRM is compiled without SMT-RAT support."); |
|||
#else
|
|||
// Construct the settingsManager.
|
|||
//smtrat::RuntimeSettingsManager settingsManager;
|
|||
|
|||
// Construct solver.
|
|||
smtrat::RatOne* solver = new smtrat::RatOne(); |
|||
|
|||
//std::list<std::pair<std::string, smtrat::RuntimeSettings*> > settingsObjects =
|
|||
smtrat::addModules( solver ); |
|||
|
|||
// Introduce the settingsObjects from the modules to the manager.
|
|||
//settingsManager.addSettingsObject( settingsObjects );
|
|||
//settingsObjects.clear();
|
|||
#endif
|
|||
} |
|||
|
|||
SmtratSmtSolver::~SmtratSmtSolver() { |
|||
delete solver; |
|||
} |
|||
|
|||
void SmtratSmtSolver::push() |
|||
{ |
|||
#ifndef STORM_HAVE_SMTRAT
|
|||
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "StoRM is compiled without SMT-RAT support."); |
|||
#else
|
|||
this->solver->push(); |
|||
#endif
|
|||
} |
|||
|
|||
void SmtratSmtSolver::pop() |
|||
{ |
|||
#ifndef STORM_HAVE_SMTRAT
|
|||
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "StoRM is compiled without SMT-RAT support."); |
|||
#else
|
|||
this->solver->pop(); |
|||
#endif
|
|||
} |
|||
|
|||
void SmtratSmtSolver::pop(uint_fast64_t n) |
|||
{ |
|||
#ifndef STORM_HAVE_SMTRAT
|
|||
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "StoRM is compiled without SMT-RAT support."); |
|||
#else
|
|||
this->solver->pop(static_cast<unsigned int>(n)); |
|||
#endif
|
|||
} |
|||
|
|||
|
|||
SmtSolver::CheckResult SmtratSmtSolver::check() |
|||
{ |
|||
#ifdef STORM_HAVE_SMTRAT
|
|||
switch (this->solver->check()) { |
|||
case smtrat::Answer::True: |
|||
this->lastResult = SmtSolver::CheckResult::Sat; |
|||
break; |
|||
case smtrat::Answer::False: |
|||
this->lastResult = SmtSolver::CheckResult::Unsat; |
|||
break; |
|||
case smtrat::Answer::Unknown: |
|||
this->lastResult = SmtSolver::CheckResult::Unknown; |
|||
break; |
|||
default: |
|||
// maybe exit
|
|||
this->lastResult = SmtSolver::CheckResult::Unknown; |
|||
break; |
|||
} |
|||
return this->lastResult; |
|||
#else
|
|||
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "StoRM is compiled without Z3 support."); |
|||
#endif
|
|||
} |
|||
|
|||
void SmtratSmtSolver::add(const storm::RawPolynomial& pol, storm::CompareRelation cr) { |
|||
this->solver->add(smtrat::FormulaT(pol, cr)); |
|||
} |
|||
|
|||
template<> |
|||
smtrat::Model SmtratSmtSolver::getModel() const |
|||
{ |
|||
return this->solver->model(); |
|||
} |
|||
|
|||
std::vector<smtrat::FormulasT> const& SmtratSmtSolver::getUnsatisfiableCores() const |
|||
{ |
|||
return this->solver->infeasibleSubsets(); |
|||
} |
|||
|
|||
|
|||
} |
|||
} |
@ -0,0 +1,50 @@ |
|||
#ifndef STORM_SOLVER_SMTRATSMTSOLVER |
|||
#define STORM_SOLVER_SMTRATSMTSOLVER |
|||
#include "storm-config.h" |
|||
#include "src/solver/SmtSolver.h" |
|||
|
|||
#ifdef STORM_HAVE_SMTRAT |
|||
#include "lib/smtrat.h" |
|||
#include "../adapters/carlAdapter.h" |
|||
|
|||
|
|||
namespace storm { |
|||
namespace solver { |
|||
class SmtratSmtSolver : public SmtSolver { |
|||
private: |
|||
smtrat::RatOne* solver; |
|||
unsigned exitCode; |
|||
|
|||
public: |
|||
SmtratSmtSolver(storm::expressions::ExpressionManager& manager); |
|||
virtual ~SmtratSmtSolver(); |
|||
|
|||
virtual void push() override; |
|||
|
|||
virtual void pop() override; |
|||
|
|||
virtual void pop(uint_fast64_t n) override; |
|||
|
|||
virtual CheckResult check() override; |
|||
#ifdef STORM_HAVE_CARL |
|||
void add(storm::RawPolynomial const&, storm::CompareRelation); |
|||
|
|||
template<typename ReturnType> |
|||
ReturnType getModel() const; |
|||
|
|||
std::vector<smtrat::FormulasT> const& getUnsatisfiableCores() const; |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
#endif |
|||
|
|||
// The last result that was returned by any of the check methods. |
|||
CheckResult lastResult; |
|||
}; |
|||
} |
|||
} |
|||
#endif |
|||
|
|||
#endif // STORM_SOLVER_SMTRATSMTSOLVER |
Write
Preview
Loading…
Cancel
Save
Reference in new issue