diff --git a/resources/3rdparty/cudd-3.0.0/cplusplus/cuddObj.cc b/resources/3rdparty/cudd-3.0.0/cplusplus/cuddObj.cc index 800ebe26a..2f91c20a7 100644 --- a/resources/3rdparty/cudd-3.0.0/cplusplus/cuddObj.cc +++ b/resources/3rdparty/cudd-3.0.0/cplusplus/cuddObj.cc @@ -3503,6 +3503,15 @@ BDD::ExistAbstract( } // BDD::ExistAbstract +BDD +ExistAbstractRepresentative(const BDD& cube) const { + DdManager *mgr = checkSameManager(cube); + DdNode *result; + result = Cudd_bddExistAbstractRepresentative(mgr, node, cube.node); + checkReturnValue(result); + return BDD(p, result); +} // BDD::ExistAbstractRepresentative + BDD BDD::ExistAbstractRepresentative( const BDD& cube) const diff --git a/src/modelchecker/abstraction/GameBasedMdpModelChecker.cpp b/src/modelchecker/abstraction/GameBasedMdpModelChecker.cpp index 71e39cf67..d5a4928c0 100644 --- a/src/modelchecker/abstraction/GameBasedMdpModelChecker.cpp +++ b/src/modelchecker/abstraction/GameBasedMdpModelChecker.cpp @@ -2,6 +2,8 @@ #include "src/storage/expressions/ExpressionManager.h" +#include "src/logic/FragmentSpecification.h" + #include "src/utility/macros.h" #include "src/exceptions/NotSupportedException.h" @@ -31,22 +33,8 @@ namespace storm { template bool GameBasedMdpModelChecker::canHandle(CheckTask const& checkTask) const { storm::logic::Formula const& formula = checkTask.getFormula(); - if (formula.isProbabilityOperatorFormula()) { - return this->canHandle(checkTask.replaceFormula(formula.asProbabilityOperatorFormula().getSubformula())); - } else if (formula.isUntilFormula() || formula.isEventuallyFormula()) { - if (formula.isUntilFormula()) { - storm::logic::UntilFormula const& untilFormula = formula.asUntilFormula(); - if (untilFormula.getLeftSubformula().isPropositionalFormula() && untilFormula.getRightSubformula().isPropositionalFormula()) { - return true; - } - } else if (formula.isEventuallyFormula()) { - storm::logic::EventuallyFormula const& eventuallyFormula = formula.asEventuallyFormula(); - if (eventuallyFormula.getSubformula().isPropositionalFormula()) { - return true; - } - } - } - return false; + storm::logic::FragmentSpecification fragment = storm::logic::reachability(); + return formula.isInFragment(fragment) && checkTask.isOnlyInitialStatesRelevantSet(); } template @@ -56,7 +44,7 @@ namespace storm { } template - std::unique_ptr GameBasedMdpModelChecker::computeEventuallyProbabilities(CheckTask const& checkTask) { + std::unique_ptr GameBasedMdpModelChecker::computeReachabilityProbabilities(CheckTask const& checkTask) { storm::logic::EventuallyFormula const& pathFormula = checkTask.getFormula(); return performGameBasedAbstractionRefinement(CheckTask(pathFormula), originalProgram.getManager().boolean(true), getExpression(pathFormula.getSubformula())); } diff --git a/src/modelchecker/abstraction/GameBasedMdpModelChecker.h b/src/modelchecker/abstraction/GameBasedMdpModelChecker.h index c10510ec0..6f289859b 100644 --- a/src/modelchecker/abstraction/GameBasedMdpModelChecker.h +++ b/src/modelchecker/abstraction/GameBasedMdpModelChecker.h @@ -28,7 +28,7 @@ namespace storm { virtual bool canHandle(CheckTask const& checkTask) const override; virtual std::unique_ptr computeUntilProbabilities(CheckTask const& checkTask) override; - virtual std::unique_ptr computeEventuallyProbabilities(CheckTask const& checkTask) override; + virtual std::unique_ptr computeReachabilityProbabilities(CheckTask const& checkTask) override; private: std::unique_ptr performGameBasedAbstractionRefinement(CheckTask const& checkTask, storm::expressions::Expression const& constraintExpression, storm::expressions::Expression const& targetStateExpression);