Storm
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
12
15
16namespace storm {
17namespace logic {
18class Formula;
19}
20
21namespace dd {
22namespace bisimulation {
23
24template<storm::dd::DdType DdType, typename ValueType>
25class PreservationInformation;
26
27template<storm::dd::DdType DdType, typename ValueType>
28class Partition {
29 public:
30 Partition();
31
32 bool operator==(Partition<DdType, ValueType> const& other) const;
33
34 Partition<DdType, ValueType> replacePartition(storm::dd::Add<DdType, ValueType> const& newPartitionAdd, uint64_t numberOfBlocks,
35 uint64_t nextFreeBlockIndex,
36 boost::optional<storm::dd::Add<DdType, ValueType>> const& changedStates = boost::none) const;
37 Partition<DdType, ValueType> replacePartition(storm::dd::Bdd<DdType> const& newPartitionBdd, uint64_t numberOfBlocks, uint64_t nextFreeBlockIndex,
38 boost::optional<storm::dd::Bdd<DdType>> const& changedStates = boost::none) const;
39
41 PreservationInformation<DdType, ValueType> const& preservationInformation);
43 std::vector<std::shared_ptr<storm::logic::Formula const>> const& formulas);
45 std::pair<storm::expressions::Variable, storm::expressions::Variable> const& blockVariables);
46
47 uint64_t getNumberOfStates() const;
48 uint64_t getNumberOfBlocks() const;
49
50 bool storedAsAdd() const;
51 bool storedAsBdd() const;
52
54 storm::dd::Bdd<DdType> const& asBdd() const;
55
56 std::pair<storm::expressions::Variable, storm::expressions::Variable> const& getBlockVariables() const;
59
60 uint64_t getNextFreeBlockIndex() const;
61 uint64_t getNodeCount() const;
62
64
68 bool hasChangedStates() const;
69
75
76 private:
89 std::pair<storm::expressions::Variable, storm::expressions::Variable> const& blockVariables, uint64_t numberOfBlocks, uint64_t nextFreeBlockIndex,
90 boost::optional<storm::dd::Add<DdType, ValueType>> const& changedStates = boost::none);
91
103 Partition(storm::dd::Bdd<DdType> const& partitionBdd, std::pair<storm::expressions::Variable, storm::expressions::Variable> const& blockVariables,
104 uint64_t numberOfBlocks, uint64_t nextFreeBlockIndex, boost::optional<storm::dd::Bdd<DdType>> const& changedStates = boost::none);
105
109 static Partition create(storm::models::symbolic::Model<DdType, ValueType> const& model, std::vector<storm::expressions::Expression> const& expressions,
110 storm::storage::BisimulationType const& bisimulationType);
111
113 storm::logic::Formula const& constraintFormula, storm::logic::Formula const& targetFormula);
115 storm::dd::Bdd<DdType> const& constraintStates, storm::dd::Bdd<DdType> const& targetStates);
116 static boost::optional<std::pair<std::shared_ptr<storm::logic::Formula const>, std::shared_ptr<storm::logic::Formula const>>>
117 extractConstraintTargetFormulas(storm::logic::Formula const& formula);
118
119 static std::pair<storm::dd::Bdd<DdType>, uint64_t> createPartitionBdd(storm::dd::DdManager<DdType> const& manager,
121 std::vector<storm::dd::Bdd<DdType>> const& stateSets,
122 storm::expressions::Variable const& blockVariable);
123
124 static std::pair<storm::expressions::Variable, storm::expressions::Variable> createBlockVariables(
126 static std::pair<storm::expressions::Variable, storm::expressions::Variable> createBlockVariables(storm::dd::DdManager<DdType>& manager,
127 uint64_t numberOfDdVariables);
128
130 boost::variant<storm::dd::Bdd<DdType>, storm::dd::Add<DdType, ValueType>> partition;
131
133 boost::optional<boost::variant<storm::dd::Bdd<DdType>, storm::dd::Add<DdType, ValueType>>> changedStates;
134
136 std::pair<storm::expressions::Variable, storm::expressions::Variable> blockVariables;
137
139 uint64_t numberOfBlocks;
140
142 uint64_t nextFreeBlockIndex;
143};
144
145} // namespace bisimulation
146} // namespace dd
147} // 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:61
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:67
Base class for all symbolic models.
Definition Model.h:46
Base class for all nondeterministic symbolic models.
LabParser.cpp.
Definition cli.cpp:18