diff --git a/src/storm-dft/modelchecker/dft/DFTASFChecker.cpp b/src/storm-dft/modelchecker/dft/DFTASFChecker.cpp index 85326c8b2..a5633bb56 100644 --- a/src/storm-dft/modelchecker/dft/DFTASFChecker.cpp +++ b/src/storm-dft/modelchecker/dft/DFTASFChecker.cpp @@ -617,11 +617,6 @@ namespace storm { STORM_LOG_DEBUG( "Check " << dft.getElement(dep1Index)->name() << " and " << dft.getElement(dep2Index)->name()); andConstr.clear(); - // Both FDEPs were triggered before dependent elements have failed - andConstr.push_back(std::make_shared<IsLess>( - timePointVariables.at(dep1Index), dependencyVariables.at(dep1Index))); - andConstr.push_back(std::make_shared<IsLess>( - timePointVariables.at(dep2Index), dependencyVariables.at(dep2Index))); // AND FDEP1 is triggered before FDEP2 is resolved andConstr.push_back(std::make_shared<IsGreaterEqual>( timePointVariables.at(dep1Index), timePointVariables.at(dep2Index))); @@ -630,11 +625,6 @@ namespace storm { std::shared_ptr<SmtConstraint> betweenConstr1 = std::make_shared<And>(andConstr); andConstr.clear(); - // Both FDEPs were triggered before dependent elements have failed - andConstr.push_back(std::make_shared<IsLess>( - timePointVariables.at(dep1Index), dependencyVariables.at(dep1Index))); - andConstr.push_back(std::make_shared<IsLess>( - timePointVariables.at(dep2Index), dependencyVariables.at(dep2Index))); // AND FDEP2 is triggered before FDEP1 is resolved andConstr.push_back(std::make_shared<IsGreaterEqual>( timePointVariables.at(dep2Index), timePointVariables.at(dep1Index))); @@ -646,7 +636,17 @@ namespace storm { // Either one of the above constraints holds orConstr.push_back(betweenConstr1); orConstr.push_back(betweenConstr2); - std::shared_ptr<SmtConstraint> checkConstr = std::make_shared<Or>(orConstr); + + // Both FDEPs were triggered before dependent elements have failed + andConstr.clear(); + andConstr.push_back(std::make_shared<IsLess>( + timePointVariables.at(dep1Index), dependencyVariables.at(dep1Index))); + andConstr.push_back(std::make_shared<IsLess>( + timePointVariables.at(dep2Index), dependencyVariables.at(dep2Index))); + andConstr.push_back(std::make_shared<Or>(orConstr)); + + std::shared_ptr<SmtConstraint> checkConstr = std::make_shared<And>(andConstr); + std::shared_ptr<storm::expressions::ExpressionManager> manager = solver->getManager().getSharedPointer(); solver->push(); solver->add(checkConstr->toExpression(varNames, manager));