21template<
typename ModelType>
22const std::string BisimulationAbstractionRefinementModelChecker<ModelType>::name =
"bisimulation-based astraction refinement";
24template<
typename ModelType>
31template<
typename ModelType>
36template<
typename ModelType>
41template<
typename ModelType>
46template<
typename ModelType>
52 if (!checkTask.isRewardModelSet() || model.hasUniqueRewardModel()) {
53 preservationInformation.addRewardModel(model.getUniqueRewardModelName());
54 }
else if (checkTask.isRewardModelSet()) {
55 preservationInformation.addRewardModel(checkTask.getRewardModel());
61 preservationInformation);
64template<
typename ModelType>
65std::shared_ptr<storm::models::Model<typename BisimulationAbstractionRefinementModelChecker<ModelType>::ValueType>>
68 return lastAbstractModel;
71template<
typename ModelType>
72std::pair<std::unique_ptr<storm::gbar::abstraction::StateSet>, std::unique_ptr<storm::gbar::abstraction::StateSet>>
84 std::pair<std::unique_ptr<storm::gbar::abstraction::StateSet>, std::unique_ptr<storm::gbar::abstraction::StateSet>> result;
85 result.first = std::make_unique<storm::gbar::abstraction::SymbolicStateSet<DdType>>(ddResult.first);
86 result.second = std::make_unique<storm::gbar::abstraction::SymbolicStateSet<DdType>>(ddResult.second);
90template<
typename ModelType>
91template<
typename QuotientModelType>
92std::pair<storm::dd::Bdd<BisimulationAbstractionRefinementModelChecker<ModelType>::DdType>,
100 if (checkTask.getFormula().isUntilFormula()) {
101 std::unique_ptr<storm::modelchecker::CheckResult> subresult = checker.
check(checkTask.getFormula().asUntilFormula().getLeftSubformula());
102 result.first = subresult->asSymbolicQualitativeCheckResult<
DdType>().getTruthValuesVector();
103 subresult = checker.
check(checkTask.getFormula().asUntilFormula().getRightSubformula());
104 result.second = subresult->asSymbolicQualitativeCheckResult<
DdType>().getTruthValuesVector();
105 }
else if (checkTask.getFormula().isEventuallyFormula()) {
107 result.first = quotient.getReachableStates();
108 std::unique_ptr<storm::modelchecker::CheckResult> subresult = checker.
check(eventuallyFormula.
getSubformula());
109 result.second = subresult->asSymbolicQualitativeCheckResult<
DdType>().getTruthValuesVector();
111 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The given formula is not supported by this model checker.");
117template<
typename ModelType>
121 return model.getType() == lastAbstractModel->getType() ? 0 : 1;
124template<
typename ModelType>
129template<
typename ModelType>
132 this->bisimulation->compute(10);
storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const & getCheckTask() const
AbstractAbstractionRefinementModelChecker(abstraction::AbstractionOptions const &options=abstraction::AbstractionOptions())
Constructs a model checker for the given model.
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.
static const storm::dd::DdType DdType
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()
BisimulationAbstractionRefinementModelChecker(ModelType const &model, abstraction::AbstractionOptions const &options=abstraction::AbstractionOptions())
Constructs a model checker for the given model.
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)
Options that configure the game-based abstraction-refinement procedure.