2#include <boost/any.hpp>
11 boost::any result = f.
accept(*
this, boost::any());
12 return boost::any_cast<std::shared_ptr<Formula>>(result);
16 return std::static_pointer_cast<Formula>(std::make_shared<AtomicExpressionFormula>(f));
20 return std::static_pointer_cast<Formula>(std::make_shared<AtomicLabelFormula>(f));
24 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().accept(*
this, data));
25 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().accept(*
this, data));
26 return std::static_pointer_cast<Formula>(std::make_shared<BinaryBooleanStateFormula>(f.
getOperator(), left, right));
30 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().accept(*
this, data));
31 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().accept(*
this, data));
32 return std::static_pointer_cast<Formula>(std::make_shared<BinaryBooleanPathFormula>(f.
getOperator(), left, right));
36 return std::static_pointer_cast<Formula>(std::make_shared<BooleanLiteralFormula>(f));
40 std::vector<std::optional<TimeBound>> lowerBounds, upperBounds;
41 std::vector<TimeBoundReference> timeBoundReferences;
46 lowerBounds.emplace_back();
51 upperBounds.emplace_back();
56 std::vector<std::shared_ptr<Formula const>> leftSubformulas, rightSubformulas;
58 leftSubformulas.push_back(boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula(i).
accept(*
this, data)));
61 return std::static_pointer_cast<Formula>(
62 std::make_shared<BoundedUntilFormula>(leftSubformulas, rightSubformulas, lowerBounds, upperBounds, timeBoundReferences));
64 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().accept(*
this, data));
65 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().accept(*
this, data));
66 return std::static_pointer_cast<Formula>(std::make_shared<BoundedUntilFormula>(left, right, lowerBounds, upperBounds, timeBoundReferences));
71 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
72 std::shared_ptr<Formula> conditionFormula = boost::any_cast<std::shared_ptr<Formula>>(f.
getConditionFormula().accept(*
this, data));
73 return std::static_pointer_cast<Formula>(std::make_shared<ConditionalFormula>(subformula, conditionFormula, f.
getContext()));
77 return std::static_pointer_cast<Formula>(std::make_shared<CumulativeRewardFormula>(f));
81 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
85 return std::static_pointer_cast<Formula>(std::make_shared<EventuallyFormula>(subformula, f.
getContext()));
90 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
91 return std::static_pointer_cast<Formula>(std::make_shared<TimeOperatorFormula>(subformula, f.
getOperatorInformation()));
95 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
96 return std::static_pointer_cast<Formula>(std::make_shared<GloballyFormula>(subformula));
100 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
101 return std::static_pointer_cast<Formula>(std::make_shared<GameFormula>(f.
getCoalition(), subformula));
105 return std::static_pointer_cast<Formula>(std::make_shared<InstantaneousRewardFormula>(f));
109 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
110 return std::static_pointer_cast<Formula>(std::make_shared<LongRunAverageOperatorFormula>(subformula, f.
getOperatorInformation()));
114 return std::static_pointer_cast<Formula>(std::make_shared<LongRunAverageRewardFormula>(f));
118 std::vector<std::shared_ptr<Formula const>> subformulas;
120 subformulas.push_back(boost::any_cast<std::shared_ptr<Formula>>(subF->accept(*
this, data)));
122 return std::static_pointer_cast<Formula>(std::make_shared<MultiObjectiveFormula>(subformulas, f.
getType()));
126 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
127 return std::static_pointer_cast<Formula>(std::make_shared<QuantileFormula>(f.
getBoundVariables(), subformula));
131 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
132 return std::static_pointer_cast<Formula>(std::make_shared<NextFormula>(subformula));
136 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
137 return std::static_pointer_cast<Formula>(std::make_shared<ProbabilityOperatorFormula>(subformula, f.
getOperatorInformation()));
141 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
146 return std::static_pointer_cast<Formula>(std::make_shared<TotalRewardFormula>(f));
150 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
151 return std::static_pointer_cast<Formula>(std::make_shared<UnaryBooleanStateFormula>(f.
getOperator(), subformula));
155 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
156 return std::static_pointer_cast<Formula>(std::make_shared<UnaryBooleanPathFormula>(f.
getOperator(), subformula));
160 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().accept(*
this, data));
161 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().accept(*
this, data));
162 return std::static_pointer_cast<Formula>(std::make_shared<UntilFormula>(left, right));
166 std::shared_ptr<HOAPathFormula> result = std::make_shared<HOAPathFormula>(f.
getAutomatonFile());
168 std::shared_ptr<Formula> clonedExpression = boost::any_cast<std::shared_ptr<Formula>>(mapped.second->accept(*
this, data));
169 result->addAPMapping(mapped.first, clonedExpression);
171 return std::static_pointer_cast<Formula>(result);
175 return std::static_pointer_cast<Formula>(std::make_shared<DiscountedCumulativeRewardFormula>(f));
179 return std::static_pointer_cast<Formula>(std::make_shared<DiscountedTotalRewardFormula>(f));
std::shared_ptr< Formula > clone(Formula const &f) const
virtual boost::any visit(AtomicExpressionFormula const &f, boost::any const &data) const override