|
@ -523,6 +523,8 @@ namespace storm { |
|
|
storm::storage::BitVector topStates = statesWithProbability01.second; |
|
|
storm::storage::BitVector topStates = statesWithProbability01.second; |
|
|
storm::storage::BitVector bottomStates = statesWithProbability01.first; |
|
|
storm::storage::BitVector bottomStates = statesWithProbability01.first; |
|
|
|
|
|
|
|
|
|
|
|
STORM_LOG_THROW(topStates.begin() != topStates.end(), storm::exceptions::NotImplementedException, "Formula yields to no 1 states"); |
|
|
|
|
|
STORM_LOG_THROW(bottomStates.begin() != bottomStates.end(), storm::exceptions::NotImplementedException, "Formula yields to no zero states"); |
|
|
// Transform to Lattice
|
|
|
// Transform to Lattice
|
|
|
storm::storage::SparseMatrix<ValueType> matrix = sparseModel.get()->getTransitionMatrix(); |
|
|
storm::storage::SparseMatrix<ValueType> matrix = sparseModel.get()->getTransitionMatrix(); |
|
|
storm::analysis::Lattice* lattice = storm::analysis::Lattice::toLattice<ValueType>(matrix, topStates, bottomStates); |
|
|
storm::analysis::Lattice* lattice = storm::analysis::Lattice::toLattice<ValueType>(matrix, topStates, bottomStates); |
|
@ -540,16 +542,15 @@ namespace storm { |
|
|
// go over all rows
|
|
|
// go over all rows
|
|
|
auto row = matrix.getRow(i); |
|
|
auto row = matrix.getRow(i); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto first = (*row.begin()); |
|
|
auto first = (*row.begin()); |
|
|
if (first.getValue() != ValueType(1)) { |
|
|
if (first.getValue() != ValueType(1)) { |
|
|
auto second = (* (row.begin() + 1)); |
|
|
|
|
|
|
|
|
auto second = (*(++row.begin())); |
|
|
|
|
|
|
|
|
auto val = first.getValue(); |
|
|
auto val = first.getValue(); |
|
|
auto vars = val.gatherVariables(); |
|
|
auto vars = val.gatherVariables(); |
|
|
for (auto itr = vars.begin(); itr != vars.end(); ++itr) { |
|
|
for (auto itr = vars.begin(); itr != vars.end(); ++itr) { |
|
|
auto derivative = val.derivative(*itr); |
|
|
auto derivative = val.derivative(*itr); |
|
|
STORM_LOG_THROW(derivative.isConstant(), storm::exceptions::NotSupportedException, "Expecting probability to have at most degree 1"); |
|
|
|
|
|
|
|
|
STORM_LOG_THROW(derivative.isConstant(), storm::exceptions::NotSupportedException, "Expecting derivative to be constant"); |
|
|
|
|
|
|
|
|
if (varsMonotone.find(*itr) == varsMonotone.end()) { |
|
|
if (varsMonotone.find(*itr) == varsMonotone.end()) { |
|
|
varsMonotone[*itr].first = true; |
|
|
varsMonotone[*itr].first = true; |