#pragma once #include "storm-pars/modelchecker/region/RegionModelChecker.h" #include "storm-pars/modelchecker/region/SparseParameterLiftingModelChecker.h" #include "storm-pars/storage/ParameterRegion.h" #include "storm/utility/NumberTraits.h" namespace storm { namespace modelchecker { template class ValidatingSparseParameterLiftingModelChecker : public RegionModelChecker { static_assert(storm::NumberTraits::IsExact, "Specified type for exact computations is not exact."); public: ValidatingSparseParameterLiftingModelChecker(); virtual ~ValidatingSparseParameterLiftingModelChecker(); virtual bool canHandle(std::shared_ptr parametricModel, CheckTask const& checkTask) const override; /*! * Analyzes the given region by means of parameter lifting. * We first apply unsound solution methods (standard value iteratio with doubles) and then validate the obtained result * by means of exact and soud methods. */ virtual RegionResult analyzeRegion(storm::storage::ParameterRegion const& region, RegionResultHypothesis const& hypothesis = RegionResultHypothesis::Unknown, RegionResult const& initialResult = RegionResult::Unknown, bool sampleVerticesOfRegion = false) override; protected: virtual SparseParameterLiftingModelChecker& getImpreciseChecker() = 0; virtual SparseParameterLiftingModelChecker const& getImpreciseChecker() const = 0; virtual SparseParameterLiftingModelChecker& getPreciseChecker() = 0; virtual SparseParameterLiftingModelChecker const& getPreciseChecker() const = 0; virtual void applyHintsToPreciseChecker() = 0; private: // Information for statistics uint_fast64_t numOfWrongRegions; }; } }