dehnert
7 years ago
4 changed files with 98 additions and 89 deletions
-
65src/storm/storage/dd/bisimulation/Partition.cpp
-
35src/storm/storage/dd/bisimulation/Partition.h
-
74src/storm/storage/dd/bisimulation/PreservationInformation.cpp
-
13src/storm/storage/dd/bisimulation/PreservationInformation.h
@ -1,24 +1,90 @@ |
|||
#include "storm/storage/dd/bisimulation/PreservationInformation.h"
|
|||
|
|||
#include "storm/logic/Formulas.h"
|
|||
|
|||
#include "storm/utility/macros.h"
|
|||
#include "storm/exceptions/InvalidPropertyException.h"
|
|||
|
|||
namespace storm { |
|||
namespace dd { |
|||
namespace bisimulation { |
|||
|
|||
void PreservationInformation::addLabel(std::string const& label) { |
|||
template <storm::dd::DdType DdType, typename ValueType> |
|||
PreservationInformation<DdType, ValueType>::PreservationInformation(storm::models::symbolic::Model<DdType, ValueType> const& model, storm::storage::BisimulationType const& bisimulationType) : PreservationInformation(model, model.getLabels(), bisimulationType) { |
|||
// Intentionally left empty.
|
|||
} |
|||
|
|||
template <storm::dd::DdType DdType, typename ValueType> |
|||
PreservationInformation<DdType, ValueType>::PreservationInformation(storm::models::symbolic::Model<DdType, ValueType> const& model, std::vector<std::string> const& labels, storm::storage::BisimulationType const& bisimulationType) { |
|||
for (auto const& label : labels) { |
|||
this->addLabel(label); |
|||
this->addExpression(model.getExpression(label)); |
|||
} |
|||
} |
|||
|
|||
template <storm::dd::DdType DdType, typename ValueType> |
|||
PreservationInformation<DdType, ValueType>::PreservationInformation(storm::models::symbolic::Model<DdType, ValueType> const& model, std::vector<storm::expressions::Expression> const& expressions, storm::storage::BisimulationType const& bisimulationType) { |
|||
for (auto const& e : expressions) { |
|||
this->addExpression(e); |
|||
} |
|||
} |
|||
|
|||
template <storm::dd::DdType DdType, typename ValueType> |
|||
PreservationInformation<DdType, ValueType>::PreservationInformation(storm::models::symbolic::Model<DdType, ValueType> const& model, std::vector<std::shared_ptr<storm::logic::Formula const>> const& formulas, storm::storage::BisimulationType const& bisimulationType) { |
|||
if (formulas.empty()) { |
|||
// Default to respect all labels if no formulas are given.
|
|||
for (auto const& label : model.getLabels()) { |
|||
this->addLabel(label); |
|||
this->addExpression(model.getExpression(label)); |
|||
} |
|||
} else { |
|||
std::set<std::string> labels; |
|||
std::set<storm::expressions::Expression> expressions; |
|||
|
|||
for (auto const& formula : formulas) { |
|||
for (auto const& expressionFormula : formula->getAtomicExpressionFormulas()) { |
|||
this->addExpression(expressionFormula->getExpression()); |
|||
} |
|||
for (auto const& labelFormula : formula->getAtomicLabelFormulas()) { |
|||
this->addLabel(labelFormula->getLabel()); |
|||
std::string const& label = labelFormula->getLabel(); |
|||
STORM_LOG_THROW(model.hasLabel(label), storm::exceptions::InvalidPropertyException, "Property refers to illegal label '" << label << "'."); |
|||
this->addExpression(model.getExpression(label)); |
|||
} |
|||
} |
|||
|
|||
std::vector<storm::expressions::Expression> expressionVector; |
|||
for (auto const& expression : expressions) { |
|||
expressionVector.emplace_back(expression); |
|||
} |
|||
} |
|||
} |
|||
|
|||
template <storm::dd::DdType DdType, typename ValueType> |
|||
void PreservationInformation<DdType, ValueType>::addLabel(std::string const& label) { |
|||
labels.insert(label); |
|||
} |
|||
|
|||
void PreservationInformation::addExpression(storm::expressions::Expression const& expression) { |
|||
template <storm::dd::DdType DdType, typename ValueType> |
|||
void PreservationInformation<DdType, ValueType>::addExpression(storm::expressions::Expression const& expression) { |
|||
expressions.insert(expression); |
|||
} |
|||
|
|||
std::set<std::string> const& PreservationInformation::getLabels() const { |
|||
template <storm::dd::DdType DdType, typename ValueType> |
|||
std::set<std::string> const& PreservationInformation<DdType, ValueType>::getLabels() const { |
|||
return labels; |
|||
} |
|||
|
|||
std::set<storm::expressions::Expression> const& PreservationInformation::getExpressions() const { |
|||
template <storm::dd::DdType DdType, typename ValueType> |
|||
std::set<storm::expressions::Expression> const& PreservationInformation<DdType, ValueType>::getExpressions() const { |
|||
return expressions; |
|||
} |
|||
|
|||
template class PreservationInformation<storm::dd::DdType::CUDD, double>; |
|||
|
|||
template class PreservationInformation<storm::dd::DdType::Sylvan, double>; |
|||
template class PreservationInformation<storm::dd::DdType::Sylvan, storm::RationalNumber>; |
|||
template class PreservationInformation<storm::dd::DdType::Sylvan, storm::RationalFunction>; |
|||
} |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue