|  |  | @ -45,12 +45,8 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |                         break; | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                     case storm::storage::DFTElementType::PDEP: { | 
			
		
	
		
			
				
					|  |  |  |                         auto dep = std::static_pointer_cast<storm::storage::DFTDependency<double> const>(element); | 
			
		
	
		
			
				
					|  |  |  |                         for (auto const &depEvent : dep->dependentEvents()) { | 
			
		
	
		
			
				
					|  |  |  |                             varNames.push_back("d_" + element->name() + "_" + depEvent->name()); | 
			
		
	
		
			
				
					|  |  |  |                             dependencyVariables.emplace(DependencyPair(element->id(), depEvent->id()), | 
			
		
	
		
			
				
					|  |  |  |                                                         varNames.size() - 1); | 
			
		
	
		
			
				
					|  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  |                         varNames.push_back("dep_" + element->name()); | 
			
		
	
		
			
				
					|  |  |  |                         dependencyVariables.emplace(element->id(), varNames.size() - 1); | 
			
		
	
		
			
				
					|  |  |  |                         break; | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                     default: | 
			
		
	
	
		
			
				
					|  |  | @ -120,7 +116,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |                         generateSpareConstraint(i, childVarIndices, element); | 
			
		
	
		
			
				
					|  |  |  |                         break; | 
			
		
	
		
			
				
					|  |  |  |                     case storm::storage::DFTElementType::PDEP: | 
			
		
	
		
			
				
					|  |  |  |                         // FDEPs are considered later in the Markovian constraints
 | 
			
		
	
		
			
				
					|  |  |  |                         generatePdepConstraint(i, childVarIndices, element); | 
			
		
	
		
			
				
					|  |  |  |                         break; | 
			
		
	
		
			
				
					|  |  |  |                     default: | 
			
		
	
		
			
				
					|  |  |  |                         STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, | 
			
		
	
	
		
			
				
					|  |  | @ -335,7 +331,19 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         void DFTASFChecker::generatePdepConstraint(size_t i, std::vector<uint64_t> childVarIndices, | 
			
		
	
		
			
				
					|  |  |  |                                                    std::shared_ptr<storm::storage::DFTElement<ValueType> const> element) { | 
			
		
	
		
			
				
					|  |  |  |             // TODO
 | 
			
		
	
		
			
				
					|  |  |  |             auto dependency = std::static_pointer_cast<storm::storage::DFTDependency<double> const>(element); | 
			
		
	
		
			
				
					|  |  |  |             auto const &dependentEvents = dependency->dependentEvents(); | 
			
		
	
		
			
				
					|  |  |  |             auto const &trigger = dependency->triggerEvent(); | 
			
		
	
		
			
				
					|  |  |  |             std::vector<uint64_t> dependentIndices; | 
			
		
	
		
			
				
					|  |  |  |             for (size_t j = 0; j < dependentEvents.size(); ++j) { | 
			
		
	
		
			
				
					|  |  |  |                 dependentIndices.push_back(dependentEvents[j]->id()); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             constraints.push_back(std::make_shared<IsMaximum>(dependencyVariables.at(i), dependentIndices)); | 
			
		
	
		
			
				
					|  |  |  |             constraints.back()->setDescription("Dependency " + element->name() + ": Last element"); | 
			
		
	
		
			
				
					|  |  |  |             constraints.push_back( | 
			
		
	
		
			
				
					|  |  |  |                     std::make_shared<IsEqual>(timePointVariables.at(i), timePointVariables.at(trigger->id()))); | 
			
		
	
		
			
				
					|  |  |  |             constraints.back()->setDescription("Dependency " + element->name() + ": Trigger element"); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         void DFTASFChecker::addMarkovianConstraints() { | 
			
		
	
	
		
			
				
					|  |  | @ -452,11 +460,9 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |             for (auto const &markovianVarEntry : markovianVariables) { | 
			
		
	
		
			
				
					|  |  |  |                 stream << "(declare-fun " << varNames[markovianVarEntry.second] << "() Bool)" << std::endl; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |             if (!dependencyVariables.empty()) { | 
			
		
	
		
			
				
					|  |  |  |                 stream << "; Dependency variables" << std::endl; | 
			
		
	
		
			
				
					|  |  |  |                 for (auto const &depVar : dependencyVariables) { | 
			
		
	
		
			
				
					|  |  |  |                     stream << "(declare-fun " << varNames[depVar.second] << "() Int)" << std::endl; | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             stream << "; Dependency variables" << std::endl; | 
			
		
	
		
			
				
					|  |  |  |             for (auto const &depVarEntry : dependencyVariables) { | 
			
		
	
		
			
				
					|  |  |  |                 stream << "(declare-fun " << varNames[depVarEntry.second] << "() Int)" << std::endl; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |             if (!tmpTimePointVariables.empty()) { | 
			
		
	
		
			
				
					|  |  |  |                 stream << "; Temporary variables" << std::endl; | 
			
		
	
	
		
			
				
					|  |  | @ -496,10 +502,8 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |                     manager->declareIntegerVariable(varNames[tmpVar]); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |             if (!dependencyVariables.empty()) { | 
			
		
	
		
			
				
					|  |  |  |                 for (auto const &depVar : dependencyVariables) { | 
			
		
	
		
			
				
					|  |  |  |                     manager->declareIntegerVariable(varNames[depVar]); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             for (auto const &depVarEntry : dependencyVariables) { | 
			
		
	
		
			
				
					|  |  |  |                 manager->declareIntegerVariable(varNames[depVarEntry.second]); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |             // Add constraints to solver
 | 
			
		
	
		
			
				
					|  |  |  |             for (auto const &constraint : constraints) { | 
			
		
	
	
		
			
				
					|  |  | 
 |