Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
Partition.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <vector>
5
6#include <boost/variant.hpp>
7
13
16
17namespace storm {
18namespace logic {
19class Formula;
20}
21
22namespace dd {
23namespace bisimulation {
24
25template<storm::dd::DdType DdType, typename ValueType>
27
28template<storm::dd::DdType DdType, typename ValueType>
29class Partition {
30 public:
31 Partition();
32
33 bool operator==(Partition<DdType, ValueType> const& other) const;
34
35 Partition<DdType, ValueType> replacePartition(storm::dd::Add<DdType, ValueType> const& newPartitionAdd, uint64_t numberOfBlocks,
36 uint64_t nextFreeBlockIndex,
37 boost::optional<storm::dd::Add<DdType, ValueType>> const& changedStates = boost::none) const;
38 Partition<DdType, ValueType> replacePartition(storm::dd::Bdd<DdType> const& newPartitionBdd, uint64_t numberOfBlocks, uint64_t nextFreeBlockIndex,
39 boost::optional<storm::dd::Bdd<DdType>> const& changedStates = boost::none) const;
40
42 PreservationInformation<DdType, ValueType> const& preservationInformation);
44 std::vector<std::shared_ptr<storm::logic::Formula const>> const& formulas, BisimulationOptions const& bisimulationOptions);
46 std::pair<storm::expressions::Variable, storm::expressions::Variable> const& blockVariables);
47
48 uint64_t getNumberOfStates() const;
49 uint64_t getNumberOfBlocks() const;
50
51 bool storedAsAdd() const;
52 bool storedAsBdd() const;
53
55 storm::dd::Bdd<DdType> const& asBdd() const;
56
57 std::pair<storm::expressions::Variable, storm::expressions::Variable> const& getBlockVariables() const;
60
61 uint64_t getNextFreeBlockIndex() const;
62 uint64_t getNodeCount() const;
63
65
69 bool hasChangedStates() const;
70
76
77 private:
90 std::pair<storm::expressions::Variable, storm::expressions::Variable> const& blockVariables, uint64_t numberOfBlocks, uint64_t nextFreeBlockIndex,
91 boost::optional<storm::dd::Add<DdType, ValueType>> const& changedStates = boost::none);
92
104 Partition(storm::dd::Bdd<DdType> const& partitionBdd, std::pair<storm::expressions::Variable, storm::expressions::Variable> const& blockVariables,
105 uint64_t numberOfBlocks, uint64_t nextFreeBlockIndex, boost::optional<storm::dd::Bdd<DdType>> const& changedStates = boost::none);
106
110 static Partition create(storm::models::symbolic::Model<DdType, ValueType> const& model, std::vector<storm::expressions::Expression> const& expressions,
111 storm::storage::BisimulationType const& bisimulationType);
112
114 storm::logic::Formula const& constraintFormula, storm::logic::Formula const& targetFormula);
116 storm::dd::Bdd<DdType> const& constraintStates, storm::dd::Bdd<DdType> const& targetStates);
117 static boost::optional<std::pair<std::shared_ptr<storm::logic::Formula const>, std::shared_ptr<storm::logic::Formula const>>>
118 extractConstraintTargetFormulas(storm::logic::Formula const& formula);
119
120 static std::pair<storm::dd::Bdd<DdType>, uint64_t> createPartitionBdd(storm::dd::DdManager<DdType> const& manager,
122 std::vector<storm::dd::Bdd<DdType>> const& stateSets,
123 storm::expressions::Variable const& blockVariable);
124
125 static std::pair<storm::expressions::Variable, storm::expressions::Variable> createBlockVariables(
127 static std::pair<storm::expressions::Variable, storm::expressions::Variable> createBlockVariables(storm::dd::DdManager<DdType>& manager,
128 uint64_t numberOfDdVariables);
129
131 boost::variant<storm::dd::Bdd<DdType>, storm::dd::Add<DdType, ValueType>> partition;
132
134 boost::optional<boost::variant<storm::dd::Bdd<DdType>, storm::dd::Add<DdType, ValueType>>> changedStates;
135
137 std::pair<storm::expressions::Variable, storm::expressions::Variable> blockVariables;
138
140 uint64_t numberOfBlocks;
141
143 uint64_t nextFreeBlockIndex;
144};
145
146} // namespace bisimulation
147} // namespace dd
148} // namespace storm
static Partition createTrivialChoicePartition(storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, std::pair< storm::expressions::Variable, storm::expressions::Variable > const &blockVariables)
storm::expressions::Variable const & getBlockVariable() const
bool hasChangedStates() const
Retrieves whether this partition has information about the states whose partition block assignment ch...
storm::dd::Bdd< DdType > const & asBdd() const
storm::expressions::Variable const & getPrimedBlockVariable() const
storm::dd::Bdd< DdType > getStates() const
bool operator==(Partition< DdType, ValueType > const &other) const
Definition Partition.cpp:48
storm::dd::Add< DdType, ValueType > const & changedStatesAsAdd() const
Retrieves the DD representing the states whose partition block assignment changed.
static Partition create(storm::models::symbolic::Model< DdType, ValueType > const &model, storm::storage::BisimulationType const &bisimulationType, PreservationInformation< DdType, ValueType > const &preservationInformation)
std::pair< storm::expressions::Variable, storm::expressions::Variable > const & getBlockVariables() const
storm::dd::Bdd< DdType > const & changedStatesAsBdd() const
storm::dd::Add< DdType, ValueType > const & asAdd() const
Partition< DdType, ValueType > replacePartition(storm::dd::Add< DdType, ValueType > const &newPartitionAdd, uint64_t numberOfBlocks, uint64_t nextFreeBlockIndex, boost::optional< storm::dd::Add< DdType, ValueType > > const &changedStates=boost::none) const
Definition Partition.cpp:54
Base class for all symbolic models.
Definition Model.h:42
Base class for all nondeterministic symbolic models.