11namespace modelchecker {
12template<storm::dd::DdType Type>
14 : reachableStates(reachableStates), states(reachableStates), truthValues(truthValues) {
18template<storm::dd::DdType Type>
21 : reachableStates(reachableStates), states(states), truthValues(truthValues) {
25template<storm::dd::DdType Type>
27 return std::make_unique<SymbolicQualitativeCheckResult<Type>>(this->reachableStates, this->states, this->truthValues);
30template<storm::dd::DdType Type>
35template<storm::dd::DdType Type>
37 return reachableStates == states;
40template<storm::dd::DdType Type>
45template<storm::dd::DdType Type>
48 "Cannot perform logical 'and' on check results of incompatible type.");
53template<storm::dd::DdType Type>
56 "Cannot perform logical 'and' on check results of incompatible type.");
61template<storm::dd::DdType Type>
63 this->truthValues = !this->truthValues && reachableStates;
66template<storm::dd::DdType Type>
68 return this->truthValues;
71template<storm::dd::DdType Type>
76template<storm::dd::DdType Type>
78 return reachableStates;
81template<storm::dd::DdType Type>
83 return !this->truthValues.
isZero();
86template<storm::dd::DdType Type>
88 return this->truthValues == this->states;
91template<storm::dd::DdType Type>
93 return this->truthValues.getNonZeroCount();
96template<storm::dd::DdType Type>
98 if (states.getNonZeroCount() == 1) {
99 if (truthValues.isZero()) {
104 }
else if (states == truthValues) {
107 if (truthValues.isZero()) {
110 out <<
"{true, false}\n";
116template<storm::dd::DdType Type>
118 STORM_LOG_THROW(filter.isSymbolicQualitativeCheckResult(), storm::exceptions::InvalidOperationException,
119 "Cannot filter symbolic check result with non-symbolic filter.");
120 this->states &= filter.asSymbolicQualitativeCheckResult<Type>().getTruthValuesVector();
122 this->truthValues &= filter.asSymbolicQualitativeCheckResult<Type>().getTruthValuesVector();
123 this->states &= filter.asSymbolicQualitativeCheckResult<Type>().getTruthValuesVector();
bool isZero() const
Retrieves whether this DD represents the constant zero function.
virtual bool isSymbolicQualitativeCheckResult() const
SymbolicQualitativeCheckResult< Type > & asSymbolicQualitativeCheckResult()
virtual void complement() override
storm::dd::Bdd< Type > const & getTruthValuesVector() const
virtual void filter(QualitativeCheckResult const &filter) override
Filters the current result wrt.
virtual bool isResultForAllStates() const override
virtual std::unique_ptr< CheckResult > clone() const override
virtual uint64_t count() const override
storm::dd::Bdd< Type > const & getStates() const
virtual QualitativeCheckResult & operator&=(QualitativeCheckResult const &other) override
virtual bool existsTrue() const override
virtual bool isSymbolicQualitativeCheckResult() const override
virtual QualitativeCheckResult & operator|=(QualitativeCheckResult const &other) override
virtual bool isSymbolic() const override
storm::dd::Bdd< Type > const & getReachableStates() const
virtual std::ostream & writeToStream(std::ostream &out) const override
virtual bool forallTrue() const override
SymbolicQualitativeCheckResult()=default
#define STORM_LOG_THROW(cond, exception, message)