#ifndef STORM_MODELCHECKER_ABSTRACTMODELCHECKER_H_ #define STORM_MODELCHECKER_ABSTRACTMODELCHECKER_H_ #include #include "src/modelchecker/CheckTask.h" #include "src/logic/Formulas.h" #include "src/solver/OptimizationDirection.h" namespace storm { namespace modelchecker { class CheckResult; enum class RewardType { Expectation, Variance }; class AbstractModelChecker { public: virtual ~AbstractModelChecker() { // Intentionally left empty. } /*! * Determines whether the model checker can handle the given verification task. If this method returns * false, the task must not be checked using this model checker. * * @param checkTask The task for which to check whether the model checker can handle it. * @return True iff the model checker can check the given task. */ virtual bool canHandle(CheckTask const& checkTask) const = 0; /*! * Checks the provided formula. * * @param checkTask The verification task to pursue. * @return The verification result. */ virtual std::unique_ptr check(CheckTask const& checkTask); // The methods to compute probabilities for path formulas. virtual std::unique_ptr computeProbabilities(CheckTask const& checkTask); virtual std::unique_ptr computeConditionalProbabilities(CheckTask const& checkTask); virtual std::unique_ptr computeBoundedUntilProbabilities(CheckTask const& checkTask); virtual std::unique_ptr computeReachabilityProbabilities(CheckTask const& checkTask); virtual std::unique_ptr computeGloballyProbabilities(CheckTask const& checkTask); virtual std::unique_ptr computeNextProbabilities(CheckTask const& checkTask); virtual std::unique_ptr computeUntilProbabilities(CheckTask const& checkTask); // The methods to compute the rewards for path formulas. virtual std::unique_ptr computeRewards(storm::logic::RewardMeasureType rewardMeasureType, CheckTask const& checkTask); virtual std::unique_ptr computeConditionalRewards(storm::logic::RewardMeasureType rewardMeasureType, CheckTask const& checkTask); virtual std::unique_ptr computeCumulativeRewards(storm::logic::RewardMeasureType rewardMeasureType, CheckTask const& checkTask); virtual std::unique_ptr computeInstantaneousRewards(storm::logic::RewardMeasureType rewardMeasureType, CheckTask const& checkTask); virtual std::unique_ptr computeReachabilityRewards(storm::logic::RewardMeasureType rewardMeasureType, CheckTask const& checkTask); virtual std::unique_ptr computeLongRunAverageRewards(storm::logic::RewardMeasureType rewardMeasureType, CheckTask const& checkTask); // The methods to compute the long-run average probabilities and timing measures. virtual std::unique_ptr computeLongRunAverageProbabilities(CheckTask const& checkTask); virtual std::unique_ptr computeTimes(storm::logic::RewardMeasureType rewardMeasureType, CheckTask const& checkTask); virtual std::unique_ptr computeReachabilityTimes(storm::logic::RewardMeasureType rewardMeasureType, CheckTask const& checkTask); // The methods to check state formulas. virtual std::unique_ptr checkStateFormula(CheckTask const& stateFormula); virtual std::unique_ptr checkAtomicExpressionFormula(CheckTask const& checkTask); virtual std::unique_ptr checkAtomicLabelFormula(CheckTask const& checkTask); virtual std::unique_ptr checkBinaryBooleanStateFormula(CheckTask const& checkTask); virtual std::unique_ptr checkBooleanLiteralFormula(CheckTask const& checkTask); virtual std::unique_ptr checkProbabilityOperatorFormula(CheckTask const& checkTask); virtual std::unique_ptr checkRewardOperatorFormula(CheckTask const& checkTask); virtual std::unique_ptr checkTimeOperatorFormula(CheckTask const& checkTask); virtual std::unique_ptr checkLongRunAverageOperatorFormula(CheckTask const& checkTask); virtual std::unique_ptr checkUnaryBooleanStateFormula(CheckTask const& checkTask); // The methods to check multi-objective formulas. virtual std::unique_ptr checkMultiObjectiveFormula(CheckTask const& checkTask); }; } } #endif /* STORM_MODELCHECKER_ABSTRACTMODELCHECKER_H_ */