Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
Property.h
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4
10
13
14namespace storm {
15namespace jani {
16
35
37 public:
38 FilterExpression() = default;
39
40 explicit FilterExpression(std::shared_ptr<storm::logic::Formula const> formula,
42 std::shared_ptr<storm::logic::Formula const> const& statesFormula = std::make_shared<storm::logic::AtomicLabelFormula>("init"))
43 : formula(formula), ft(ft), statesFormula(statesFormula) {
44 STORM_LOG_THROW(statesFormula->isInFragment(storm::logic::propositional()), storm::exceptions::InvalidArgumentException,
45 "Can only filter by propositional formula.");
46 }
47
48 std::shared_ptr<storm::logic::Formula const> const& getFormula() const {
49 return formula;
50 }
51
52 std::shared_ptr<storm::logic::Formula const> const& getStatesFormula() const {
53 return statesFormula;
54 }
55
57 return ft;
58 }
59
60 bool isDefault() const {
61 return (ft == storm::modelchecker::FilterType::VALUES) && statesFormula && statesFormula->isInitialFormula();
62 }
63
64 FilterExpression substitute(std::map<storm::expressions::Variable, storm::expressions::Expression> const& substitution) const {
65 return FilterExpression(formula->substitute(substitution), ft, statesFormula->substitute(substitution));
66 }
67
68 FilterExpression substitute(std::function<storm::expressions::Expression(storm::expressions::Expression const&)> const& substitutionFunction) const {
69 return FilterExpression(formula->substitute(substitutionFunction), ft, statesFormula->substitute(substitutionFunction));
70 }
71
72 FilterExpression substituteLabels(std::map<std::string, std::string> const& labelSubstitution) const {
73 return FilterExpression(formula->substitute(labelSubstitution), ft, statesFormula->substitute(labelSubstitution));
74 }
75
76 FilterExpression substituteRewardModelNames(std::map<std::string, std::string> const& rewardModelNameSubstitution) const {
77 return FilterExpression(formula->substituteRewardModelNames(rewardModelNameSubstitution), ft,
78 statesFormula->substituteRewardModelNames(rewardModelNameSubstitution));
79 }
80
82 return FilterExpression(formula->substituteTranscendentalNumbers(), ft, statesFormula->substituteTranscendentalNumbers());
83 }
84
87 return FilterExpression(cv.clone(*formula), ft, cv.clone(*statesFormula));
88 }
89
90 private:
91 // For now, we assume that the states are always the initial states.
92 std::shared_ptr<storm::logic::Formula const> formula;
94 std::shared_ptr<storm::logic::Formula const> statesFormula;
95};
96
97std::ostream& operator<<(std::ostream& os, FilterExpression const& fe);
98
99class Property {
100 public:
101 Property() = default;
102
110 Property(std::string const& name, std::shared_ptr<storm::logic::Formula const> const& formula,
111 std::set<storm::expressions::Variable> const& undefinedConstants, std::string const& comment = "");
112
119 Property(std::string const& name, FilterExpression const& fe, std::set<storm::expressions::Variable> const& undefinedConstants,
120 std::string const& comment = "");
121
126 std::string const& getName() const;
127
132 std::string const& getComment() const;
133
134 Property substitute(std::map<storm::expressions::Variable, storm::expressions::Expression> const& substitution) const;
135 Property substitute(std::function<storm::expressions::Expression(storm::expressions::Expression const&)> const& substitutionFunction) const;
136 Property substituteLabels(std::map<std::string, std::string> const& labelSubstitution) const;
137 Property substituteRewardModelNames(std::map<std::string, std::string> const& rewardModelNameSubstitution) const;
139 Property clone() const;
140
141 FilterExpression const& getFilter() const;
142
143 std::string asPrismSyntax() const;
144
145 std::set<storm::expressions::Variable> const& getUndefinedConstants() const;
146 bool containsUndefinedConstants() const;
147 std::set<storm::expressions::Variable> getUsedVariablesAndConstants() const;
148 std::set<std::string> getUsedLabels() const;
149 void gatherReferencedRewardModels(std::set<std::string>& rewardModelNames) const;
150
151 std::shared_ptr<storm::logic::Formula const> getRawFormula() const;
152
153 private:
154 std::string name;
155 std::string comment;
156 FilterExpression filterExpression;
157 std::set<storm::expressions::Variable> undefinedConstants;
158};
159
160std::ostream& operator<<(std::ostream& os, Property const& p);
161} // namespace jani
162} // namespace storm
bool isInitialized() const
Checks whether the object encapsulates a base-expression.
FilterExpression substitute(std::map< storm::expressions::Variable, storm::expressions::Expression > const &substitution) const
Definition Property.h:64
std::shared_ptr< storm::logic::Formula const > const & getFormula() const
Definition Property.h:48
FilterExpression substituteRewardModelNames(std::map< std::string, std::string > const &rewardModelNameSubstitution) const
Definition Property.h:76
FilterExpression(std::shared_ptr< storm::logic::Formula const > formula, storm::modelchecker::FilterType ft=storm::modelchecker::FilterType::VALUES, std::shared_ptr< storm::logic::Formula const > const &statesFormula=std::make_shared< storm::logic::AtomicLabelFormula >("init"))
Definition Property.h:40
FilterExpression substituteTranscendentalNumbers() const
Definition Property.h:81
FilterExpression substituteLabels(std::map< std::string, std::string > const &labelSubstitution) const
Definition Property.h:72
std::shared_ptr< storm::logic::Formula const > const & getStatesFormula() const
Definition Property.h:52
storm::modelchecker::FilterType getFilterType() const
Definition Property.h:56
FilterExpression clone() const
Definition Property.h:85
FilterExpression substitute(std::function< storm::expressions::Expression(storm::expressions::Expression const &)> const &substitutionFunction) const
Definition Property.h:68
std::shared_ptr< storm::logic::Formula const > getRawFormula() const
Definition Property.cpp:92
std::set< storm::expressions::Variable > const & getUndefinedConstants() const
Definition Property.cpp:96
bool containsUndefinedConstants() const
Definition Property.cpp:100
std::set< storm::expressions::Variable > getUsedVariablesAndConstants() const
Definition Property.cpp:104
void gatherReferencedRewardModels(std::set< std::string > &rewardModelNames) const
Definition Property.cpp:124
std::string const & getName() const
Get the provided name.
Definition Property.cpp:23
Property substituteTranscendentalNumbers() const
Definition Property.cpp:80
std::string const & getComment() const
Get the provided comment, if any.
Definition Property.cpp:27
Property substitute(std::map< storm::expressions::Variable, storm::expressions::Expression > const &substitution) const
Definition Property.cpp:54
Property substituteRewardModelNames(std::map< std::string, std::string > const &rewardModelNameSubstitution) const
Definition Property.cpp:76
FilterExpression const & getFilter() const
Definition Property.cpp:88
std::string asPrismSyntax() const
Definition Property.cpp:31
std::set< std::string > getUsedLabels() const
Definition Property.cpp:111
Property substituteLabels(std::map< std::string, std::string > const &labelSubstitution) const
Definition Property.cpp:72
Property clone() const
Definition Property.cpp:84
std::shared_ptr< Formula > clone(Formula const &f) const
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30
std::ostream & operator<<(std::ostream &stream, Assignment const &assignment)
FragmentSpecification propositional()
LabParser.cpp.
Definition cli.cpp:18
Property intervals as per Jani Specification.
Definition Property.h:21
storm::expressions::Expression upperBound
Definition Property.h:24
storm::expressions::Expression lowerBound
Definition Property.h:22