Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
QuantileFormula.cpp
Go to the documentation of this file.
2#include <boost/any.hpp>
3#include <ostream>
4
9
10namespace storm {
11namespace logic {
12
13QuantileFormula::QuantileFormula(std::vector<storm::expressions::Variable> const& boundVariables, std::shared_ptr<Formula const> subformula)
14 : boundVariables(boundVariables), subformula(subformula) {
15 STORM_LOG_THROW(!boundVariables.empty(), storm::exceptions::InvalidArgumentException, "Quantile formula without bound variables are invalid.");
16}
17
19 // Intentionally left empty
20}
21
23 return true;
24}
25
27 return true;
28}
29
33
37
39 return *subformula;
40}
41
43 return boundVariables.size();
44}
45
47 return getDimension() > 1;
48}
49
51 STORM_LOG_THROW(boundVariables.size() == 1, storm::exceptions::InvalidArgumentException,
52 "Requested unique bound variables. However, there are multiple bound variables defined.");
53 return boundVariables.front();
54}
55
57 STORM_LOG_THROW(index < boundVariables.size(), storm::exceptions::InvalidArgumentException,
58 "Requested bound variable with index" << index << ". However, there are only " << boundVariables.size() << " bound variables.");
59 return boundVariables[index];
60}
61
62std::vector<storm::expressions::Variable> const& QuantileFormula::getBoundVariables() const {
63 return boundVariables;
64}
65
66boost::any QuantileFormula::accept(FormulaVisitor const& visitor, boost::any const& data) const {
67 return visitor.visit(*this, data);
68}
69
70void QuantileFormula::gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const {
71 subformula->gatherAtomicExpressionFormulas(atomicExpressionFormulas);
72}
73
74void QuantileFormula::gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const {
75 subformula->gatherAtomicLabelFormulas(atomicLabelFormulas);
76}
77
78void QuantileFormula::gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const {
79 subformula->gatherReferencedRewardModels(referencedRewardModels);
80}
81
82std::ostream& QuantileFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
83 // No parentheses necessary
84 out << "quantile(";
85 for (auto const& bv : boundVariables) {
86 out << bv.getName() << ", ";
87 }
88 subformula->writeToStream(out);
89 out << ")";
90 return out;
91}
92} // namespace logic
93} // namespace storm
virtual boost::any visit(AtomicExpressionFormula const &f, boost::any const &data) const =0
std::vector< storm::expressions::Variable > const & getBoundVariables() const
virtual boost::any accept(FormulaVisitor const &visitor, boost::any const &data) const override
virtual bool hasParetoCurveResult() const
virtual std::ostream & writeToStream(std::ostream &out, bool allowParentheses=false) const override
Writes the forumla to the given output stream.
virtual void gatherReferencedRewardModels(std::set< std::string > &referencedRewardModels) const override
virtual bool hasQuantitativeResult() const override
Formula const & getSubformula() const
virtual void gatherAtomicLabelFormulas(std::vector< std::shared_ptr< AtomicLabelFormula const > > &atomicLabelFormulas) const override
virtual bool hasNumericalResult() const
virtual void gatherAtomicExpressionFormulas(std::vector< std::shared_ptr< AtomicExpressionFormula const > > &atomicExpressionFormulas) const override
virtual bool isQuantileFormula() const override
storm::expressions::Variable const & getBoundVariable() const
QuantileFormula(std::vector< storm::expressions::Variable > const &boundVariables, std::shared_ptr< Formula const > subformula)
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30
LabParser.cpp.
Definition cli.cpp:18