19namespace modelchecker {
21template<
typename ModelType>
22const std::string BisimulationAbstractionRefinementModelChecker<ModelType>::name =
"bisimulation-based astraction refinement";
24template<
typename ModelType>
29template<
typename ModelType>
34template<
typename ModelType>
39template<
typename ModelType>
44template<
typename ModelType>
47 auto const& checkTask = this->getCheckTask();
50 if (!checkTask.isRewardModelSet() || model.hasUniqueRewardModel()) {
51 preservationInformation.
addRewardModel(model.getUniqueRewardModelName());
52 }
else if (checkTask.isRewardModelSet()) {
53 preservationInformation.addRewardModel(checkTask.getRewardModel());
59 preservationInformation);
62template<
typename ModelType>
63std::shared_ptr<storm::models::Model<typename BisimulationAbstractionRefinementModelChecker<ModelType>::ValueType>>
66 return lastAbstractModel;
69template<
typename ModelType>
70std::pair<std::unique_ptr<storm::gbar::abstraction::StateSet>, std::unique_ptr<storm::gbar::abstraction::StateSet>>
82 std::pair<std::unique_ptr<storm::gbar::abstraction::StateSet>, std::unique_ptr<storm::gbar::abstraction::StateSet>> result;
83 result.first = std::make_unique<storm::gbar::abstraction::SymbolicStateSet<DdType>>(ddResult.first);
84 result.second = std::make_unique<storm::gbar::abstraction::SymbolicStateSet<DdType>>(ddResult.second);
88template<
typename ModelType>
89template<
typename QuotientModelType>
90std::pair<storm::dd::Bdd<BisimulationAbstractionRefinementModelChecker<ModelType>::DdType>,
95 auto const& checkTask = this->getCheckTask();
98 if (checkTask.getFormula().isUntilFormula()) {
99 std::unique_ptr<storm::modelchecker::CheckResult> subresult = checker.
check(checkTask.getFormula().asUntilFormula().getLeftSubformula());
100 result.first = subresult->asSymbolicQualitativeCheckResult<DdType>().getTruthValuesVector();
101 subresult = checker.
check(checkTask.getFormula().asUntilFormula().getRightSubformula());
102 result.second = subresult->asSymbolicQualitativeCheckResult<DdType>().getTruthValuesVector();
103 }
else if (checkTask.getFormula().isEventuallyFormula()) {
105 result.first = quotient.getReachableStates();
106 std::unique_ptr<storm::modelchecker::CheckResult> subresult = checker.
check(eventuallyFormula.
getSubformula());
107 result.second = subresult->asSymbolicQualitativeCheckResult<DdType>().getTruthValuesVector();
109 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The given formula is not supported by this model checker.");
115template<
typename ModelType>
119 return model.getType() == lastAbstractModel->getType() ? 0 : 1;
122template<
typename ModelType>
127template<
typename ModelType>
130 this->bisimulation->compute(10);
virtual bool requiresSchedulerSynthesis() const override
Retrieves whether schedulers need to be computed.
virtual std::pair< std::unique_ptr< storm::gbar::abstraction::StateSet >, std::unique_ptr< storm::gbar::abstraction::StateSet > > getConstraintAndTargetStates(storm::models::Model< ValueType > const &abstractModel) override
Retrieves the state sets corresponding to the constraint and target states.
virtual uint64_t getAbstractionPlayer() const override
Retrieves the index of the abstraction player.
BisimulationAbstractionRefinementModelChecker(ModelType const &model)
Constructs a model checker for the given model.
virtual bool supportsReachabilityRewards() const override
-----— Methods that need to be overwritten/defined by implementations in subclasses.
virtual std::shared_ptr< storm::models::Model< ValueType > > getAbstractModel() override
Retrieves the abstract model.
virtual void refineAbstractModel() override
Refines the abstract model so that the next iteration obtains bounds that are at least as precise as ...
virtual ~BisimulationAbstractionRefinementModelChecker()
virtual void initializeAbstractionRefinement() override
Called before the abstraction refinement loop to give the implementation a time to set up auxiliary d...
virtual std::string const & getName() const override
Retrieves the name of the underlying method.
virtual std::unique_ptr< CheckResult > check(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
Checks the provided formula.
This class represents a discrete-time Markov chain.
This class represents a discrete-time Markov decision process.
This class represents a discrete-time stochastic two-player game.
#define STORM_LOG_ASSERT(cond, message)
#define STORM_LOG_THROW(cond, exception, message)