|
@ -94,9 +94,12 @@ namespace storm { |
|
|
|
|
|
|
|
|
auto row = matrix.getRow(i); |
|
|
auto row = matrix.getRow(i); |
|
|
for (auto rowItr = row.begin(); rowItr != row.end(); ++rowItr) { |
|
|
for (auto rowItr = row.begin(); rowItr != row.end(); ++rowItr) { |
|
|
|
|
|
// ignore self-loops when there are more transitions
|
|
|
|
|
|
if (i != rowItr->getColumn() || row.getNumberOfEntries() == 1) { |
|
|
stateMap[i].set(rowItr->getColumn(), true); |
|
|
stateMap[i].set(rowItr->getColumn(), true); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// Create the Lattice
|
|
|
// Create the Lattice
|
|
|
storm::analysis::Lattice *lattice = new storm::analysis::Lattice(topStates, bottomStates, numberOfStates); |
|
|
storm::analysis::Lattice *lattice = new storm::analysis::Lattice(topStates, bottomStates, numberOfStates); |
|
@ -154,8 +157,11 @@ namespace storm { |
|
|
// Check if current state has not been added yet, and all successors have
|
|
|
// Check if current state has not been added yet, and all successors have
|
|
|
bool check = !seenStates[stateNumber]; |
|
|
bool check = !seenStates[stateNumber]; |
|
|
for (auto succIndex = successors.getNextSetIndex(0); check && succIndex != numberOfStates; succIndex = successors.getNextSetIndex(++succIndex)) { |
|
|
for (auto succIndex = successors.getNextSetIndex(0); check && succIndex != numberOfStates; succIndex = successors.getNextSetIndex(++succIndex)) { |
|
|
|
|
|
if (succIndex != stateNumber) { |
|
|
check &= seenStates[succIndex]; |
|
|
check &= seenStates[succIndex]; |
|
|
} |
|
|
} |
|
|
|
|
|
// if the stateNumber equals succIndex we have a self-loop
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (check && successors.getNumberOfSetBits() == 1) { |
|
|
if (check && successors.getNumberOfSetBits() == 1) { |
|
|
// As there is only one successor the current state and its successor must be at the same nodes.
|
|
|
// As there is only one successor the current state and its successor must be at the same nodes.
|
|
|