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/storage/dd/bisimulation/PreservationInformation.h"
|
||||
|
|
||||
|
#include "storm/logic/Formulas.h"
|
||||
|
|
||||
|
#include "storm/utility/macros.h"
|
||||
|
#include "storm/exceptions/InvalidPropertyException.h"
|
||||
|
|
||||
namespace storm { |
namespace storm { |
||||
namespace dd { |
namespace dd { |
||||
namespace bisimulation { |
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); |
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); |
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; |
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; |
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