|  |  | @ -1,4 +1,5 @@ | 
			
		
	
		
			
				
					|  |  |  | #include "DFTASFChecker.h"
 | 
			
		
	
		
			
				
					|  |  |  | #include <storm/storage/expressions/ExpressionManager.h>
 | 
			
		
	
		
			
				
					|  |  |  | #include <string>
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | namespace storm { | 
			
		
	
	
		
			
				
					|  |  | @ -36,7 +37,16 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 std::vector<storm::expressions::Expression> outerAnd; | 
			
		
	
		
			
				
					|  |  |  |                 std::vector<storm::expressions::Expression> innerOr; | 
			
		
	
		
			
				
					|  |  |  |                 for (auto const &ovi : varIndices) { | 
			
		
	
		
			
				
					|  |  |  |                     outerAnd.push_back((manager->getVariableExpression(varNames.at(varIndex)) >= | 
			
		
	
		
			
				
					|  |  |  |                                         manager->getVariableExpression(varNames.at(ovi)))); | 
			
		
	
		
			
				
					|  |  |  |                     innerOr.push_back((manager->getVariableExpression(varNames.at(varIndex)) == | 
			
		
	
		
			
				
					|  |  |  |                                        manager->getVariableExpression(varNames.at(ovi)))); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |                 outerAnd.push_back(disjunction(innerOr)); | 
			
		
	
		
			
				
					|  |  |  |                 return conjunction(outerAnd); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -76,7 +86,16 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 std::vector<storm::expressions::Expression> outerAnd; | 
			
		
	
		
			
				
					|  |  |  |                 std::vector<storm::expressions::Expression> innerOr; | 
			
		
	
		
			
				
					|  |  |  |                 for (auto const &ovi : varIndices) { | 
			
		
	
		
			
				
					|  |  |  |                     outerAnd.push_back((manager->getVariableExpression(varNames.at(varIndex)) <= | 
			
		
	
		
			
				
					|  |  |  |                                         manager->getVariableExpression(varNames.at(ovi)))); | 
			
		
	
		
			
				
					|  |  |  |                     innerOr.push_back((manager->getVariableExpression(varNames.at(varIndex)) == | 
			
		
	
		
			
				
					|  |  |  |                                        manager->getVariableExpression(varNames.at(ovi)))); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |                 outerAnd.push_back(disjunction(innerOr)); | 
			
		
	
		
			
				
					|  |  |  |                 return conjunction(outerAnd); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -105,7 +124,8 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return (manager->getVariableExpression(varNames.at(varIndex)) >= lowerBound) && | 
			
		
	
		
			
				
					|  |  |  |                        (manager->getVariableExpression(varNames.at(varIndex)) <= upperBound); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -139,7 +159,15 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 if (constraints.empty()) { | 
			
		
	
		
			
				
					|  |  |  |                     return manager->boolean(true); | 
			
		
	
		
			
				
					|  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |                     std::vector<storm::expressions::Expression> conjuncts; | 
			
		
	
		
			
				
					|  |  |  |                     for (auto const &c : constraints) { | 
			
		
	
		
			
				
					|  |  |  |                         conjuncts.push_back(c->toExpression(varNames, manager)); | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                     return conjunction(conjuncts); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -172,7 +200,15 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 if (constraints.empty()) { | 
			
		
	
		
			
				
					|  |  |  |                     return manager->boolean(false); | 
			
		
	
		
			
				
					|  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |                     std::vector<storm::expressions::Expression> disjuncts; | 
			
		
	
		
			
				
					|  |  |  |                     for (auto const &c : constraints) { | 
			
		
	
		
			
				
					|  |  |  |                         disjuncts.push_back(c->toExpression(varNames, manager)); | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                     return disjunction(disjuncts); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -194,7 +230,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return implies(lhs->toExpression(varNames, manager), rhs->toExpression(varNames, manager)); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -216,7 +252,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return iff(lhs->toExpression(varNames, manager), rhs->toExpression(varNames, manager)); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -241,7 +277,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return manager->boolean(value); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -270,7 +306,11 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 if (value) { | 
			
		
	
		
			
				
					|  |  |  |                     return manager->getVariableExpression(varNames.at(varIndex)); | 
			
		
	
		
			
				
					|  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |                     return !(manager->getVariableExpression(varNames.at(varIndex))); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -296,7 +336,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return manager->getVariableExpression(varNames.at(varIndex)) == manager->integer(value); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -322,7 +362,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return manager->getVariableExpression(varNames.at(varIndex)) < value; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -347,7 +387,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return manager->getVariableExpression(varNames.at(varIndex)) <= value; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -370,7 +410,8 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return manager->getVariableExpression(varNames.at(var1Index)) == | 
			
		
	
		
			
				
					|  |  |  |                        manager->getVariableExpression(varNames.at(var2Index)); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -393,7 +434,8 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return manager->getVariableExpression(varNames.at(var1Index)) < | 
			
		
	
		
			
				
					|  |  |  |                        manager->getVariableExpression(varNames.at(var2Index)); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -427,7 +469,16 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 std::vector<storm::expressions::Expression> conjuncts; | 
			
		
	
		
			
				
					|  |  |  |                 for (uint64_t i = 0; i < varIndices.size(); ++i) { | 
			
		
	
		
			
				
					|  |  |  |                     for (uint64_t j = i + 1; j < varIndices.size(); ++j) { | 
			
		
	
		
			
				
					|  |  |  |                         // check all elements pairwise for inequality
 | 
			
		
	
		
			
				
					|  |  |  |                         conjuncts.push_back(manager->getVariableExpression(varNames.at(varIndices.at(i))) != | 
			
		
	
		
			
				
					|  |  |  |                                             manager->getVariableExpression(varNames.at(varIndices.at(j)))); | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |                 // take the conjunction of all pairwise inequalities
 | 
			
		
	
		
			
				
					|  |  |  |                 return conjunction(conjuncts); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | @ -455,9 +506,16 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 std::vector<storm::expressions::Expression> conjuncts; | 
			
		
	
		
			
				
					|  |  |  |                 for (uint64_t i = 1; i < varIndices.size(); ++i) { | 
			
		
	
		
			
				
					|  |  |  |                     conjuncts.push_back(manager->getVariableExpression(varNames.at(varIndices.at(i - 1))) <= | 
			
		
	
		
			
				
					|  |  |  |                                         manager->getVariableExpression(varNames.at(varIndices.at(i)))); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |                 // take the conjunction of all pairwise inequalities
 | 
			
		
	
		
			
				
					|  |  |  |                 return conjunction(conjuncts); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
		
			
				
					|  |  |  |             std::vector<uint64_t> varIndices; | 
			
		
	
		
			
				
					|  |  |  |         }; | 
			
		
	
	
		
			
				
					|  |  | @ -479,7 +537,9 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             storm::expressions::Expression toExpression(std::vector<std::string> const &varNames, | 
			
		
	
		
			
				
					|  |  |  |                                                         std::shared_ptr<storm::expressions::ExpressionManager> manager) const override { | 
			
		
	
		
			
				
					|  |  |  |                 //TODO
 | 
			
		
	
		
			
				
					|  |  |  |                 return ite(ifConstraint->toExpression(varNames, manager), | 
			
		
	
		
			
				
					|  |  |  |                            thenConstraint->toExpression(varNames, manager), | 
			
		
	
		
			
				
					|  |  |  |                            elseConstraint->toExpression(varNames, manager)); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         private: | 
			
		
	
	
		
			
				
					|  |  | 
 |