Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
EquivalenceChecker.cpp
Go to the documentation of this file.
2
4
6
7namespace storm {
8namespace expressions {
9
10EquivalenceChecker::EquivalenceChecker(std::unique_ptr<storm::solver::SmtSolver>&& smtSolver, boost::optional<storm::expressions::Expression> const& constraint)
11 : smtSolver(std::move(smtSolver)) {
12 if (constraint) {
13 this->smtSolver->add(constraint.get());
14 }
15}
16
17void EquivalenceChecker::addConstraints(std::vector<storm::expressions::Expression> const& constraints) {
18 for (auto const& constraint : constraints) {
19 this->smtSolver->add(constraint);
20 }
21}
22
24 this->smtSolver->push();
25 this->smtSolver->add(!storm::expressions::iff(first, second));
26 bool equivalent = smtSolver->check() == storm::solver::SmtSolver::CheckResult::Unsat;
27 this->smtSolver->pop();
28 return equivalent;
29}
30
32 this->smtSolver->push();
33 this->smtSolver->add(!storm::expressions::iff(first, second));
34 bool equivalent = smtSolver->check() == storm::solver::SmtSolver::CheckResult::Unsat;
35 if (equivalent) {
36 this->smtSolver->pop();
37 return true;
38 }
39 this->smtSolver->pop();
40 this->smtSolver->push();
41 this->smtSolver->add(!storm::expressions::iff(first, !second));
42 equivalent = smtSolver->check() == storm::solver::SmtSolver::CheckResult::Unsat;
43
44 this->smtSolver->pop();
45 return equivalent;
46}
47
48} // namespace expressions
49} // namespace storm
bool areEquivalentModuloNegation(storm::expressions::Expression const &first, storm::expressions::Expression const &second)
void addConstraints(std::vector< storm::expressions::Expression > const &constraints)
bool areEquivalent(storm::expressions::Expression const &first, storm::expressions::Expression const &second)
EquivalenceChecker(std::unique_ptr< storm::solver::SmtSolver > &&smtSolver, boost::optional< storm::expressions::Expression > const &constraint=boost::none)
Creates an equivalence checker with the given solver and constraint.
Expression iff(Expression const &first, Expression const &second)
LabParser.cpp.
Definition cli.cpp:18