2#include <boost/any.hpp>
11 boost::any result = f.
accept(*
this, &substitutionFunction);
12 return boost::any_cast<std::shared_ptr<Formula>>(result);
18 boost::optional<Bound> bound;
19 if (operatorInformation.
bound) {
20 bound =
Bound(operatorInformation.
bound->comparisonType, substitutionFunction(operatorInformation.
bound->threshold));
26 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
28 return std::static_pointer_cast<Formula>(
34 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
35 return std::static_pointer_cast<Formula>(
41 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
42 return std::static_pointer_cast<Formula>(
48 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
49 return std::static_pointer_cast<Formula>(std::make_shared<RewardOperatorFormula>(
55 std::vector<boost::optional<TimeBound>> lowerBounds, upperBounds;
56 std::vector<TimeBoundReference> timeBoundReferences;
61 lowerBounds.emplace_back();
66 upperBounds.emplace_back();
71 std::vector<std::shared_ptr<Formula const>> leftSubformulas, rightSubformulas;
73 leftSubformulas.push_back(boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula(i).
accept(*
this, data)));
76 return std::static_pointer_cast<Formula>(
77 std::make_shared<BoundedUntilFormula>(leftSubformulas, rightSubformulas, lowerBounds, upperBounds, timeBoundReferences));
79 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().
accept(*
this, data));
80 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().
accept(*
this, data));
81 return std::static_pointer_cast<Formula>(std::make_shared<BoundedUntilFormula>(left, right, lowerBounds, upperBounds, timeBoundReferences));
87 std::vector<TimeBound> bounds;
88 std::vector<TimeBoundReference> timeBoundReferences;
93 boost::optional<RewardAccumulation> optionalRewardAccumulation;
97 return std::static_pointer_cast<Formula>(std::make_shared<CumulativeRewardFormula>(bounds, timeBoundReferences, optionalRewardAccumulation));
102 std::vector<TimeBound> bounds;
103 std::vector<TimeBoundReference> timeBoundReferences;
108 boost::optional<RewardAccumulation> optionalRewardAccumulation;
112 return std::static_pointer_cast<Formula>(std::make_shared<DiscountedCumulativeRewardFormula>(substitutionFunction(f.
getDiscountFactor()), bounds,
113 timeBoundReferences, optionalRewardAccumulation));
118 boost::optional<RewardAccumulation> optionalRewardAccumulation;
122 return std::static_pointer_cast<Formula>(
123 std::make_shared<DiscountedTotalRewardFormula>(substitutionFunction(f.
getDiscountFactor()), optionalRewardAccumulation));
128 return std::static_pointer_cast<Formula>(std::make_shared<InstantaneousRewardFormula>(substitutionFunction(f.
getBound()), f.
getTimeBoundType()));
133 return std::static_pointer_cast<Formula>(std::make_shared<AtomicExpressionFormula>(substitutionFunction(f.
getExpression())));
virtual boost::any visit(TimeOperatorFormula const &f, boost::any const &data) const override
std::shared_ptr< Formula > substitute(Formula const &f, std::function< storm::expressions::Expression(storm::expressions::Expression const &)> const &substitutionFunction) const
OperatorInformation substituteOperatorInformation(OperatorInformation const &operatorInformation, std::function< storm::expressions::Expression(storm::expressions::Expression const &)> const &substitutionFunction)