2#include <boost/any.hpp>
10 boost::any result = f.
accept(*
this, boost::any());
11 return boost::any_cast<std::shared_ptr<Formula>>(result);
15 return std::static_pointer_cast<Formula>(std::make_shared<AtomicExpressionFormula>(f));
19 return std::static_pointer_cast<Formula>(std::make_shared<AtomicLabelFormula>(f));
23 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().
accept(*
this, data));
24 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().
accept(*
this, data));
25 return std::static_pointer_cast<Formula>(std::make_shared<BinaryBooleanStateFormula>(f.
getOperator(), left, right));
29 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().
accept(*
this, data));
30 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().
accept(*
this, data));
31 return std::static_pointer_cast<Formula>(std::make_shared<BinaryBooleanPathFormula>(f.
getOperator(), left, right));
35 return std::static_pointer_cast<Formula>(std::make_shared<BooleanLiteralFormula>(f));
39 std::vector<boost::optional<TimeBound>> lowerBounds, upperBounds;
40 std::vector<TimeBoundReference> timeBoundReferences;
45 lowerBounds.emplace_back();
50 upperBounds.emplace_back();
55 std::vector<std::shared_ptr<Formula const>> leftSubformulas, rightSubformulas;
57 leftSubformulas.push_back(boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula(i).
accept(*
this, data)));
60 return std::static_pointer_cast<Formula>(
61 std::make_shared<BoundedUntilFormula>(leftSubformulas, rightSubformulas, lowerBounds, upperBounds, timeBoundReferences));
63 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().
accept(*
this, data));
64 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().
accept(*
this, data));
65 return std::static_pointer_cast<Formula>(std::make_shared<BoundedUntilFormula>(left, right, lowerBounds, upperBounds, timeBoundReferences));
70 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
71 std::shared_ptr<Formula> conditionFormula = boost::any_cast<std::shared_ptr<Formula>>(f.
getConditionFormula().
accept(*
this, data));
72 return std::static_pointer_cast<Formula>(std::make_shared<ConditionalFormula>(subformula, conditionFormula, f.
getContext()));
76 return std::static_pointer_cast<Formula>(std::make_shared<CumulativeRewardFormula>(f));
80 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
84 return std::static_pointer_cast<Formula>(std::make_shared<EventuallyFormula>(subformula, f.
getContext()));
89 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
90 return std::static_pointer_cast<Formula>(std::make_shared<TimeOperatorFormula>(subformula, f.
getOperatorInformation()));
94 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
95 return std::static_pointer_cast<Formula>(std::make_shared<GloballyFormula>(subformula));
99 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
100 return std::static_pointer_cast<Formula>(std::make_shared<GameFormula>(f.
getCoalition(), subformula));
104 return std::static_pointer_cast<Formula>(std::make_shared<InstantaneousRewardFormula>(f));
108 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
109 return std::static_pointer_cast<Formula>(std::make_shared<LongRunAverageOperatorFormula>(subformula, f.
getOperatorInformation()));
113 return std::static_pointer_cast<Formula>(std::make_shared<LongRunAverageRewardFormula>(f));
117 std::vector<std::shared_ptr<Formula const>> subformulas;
119 subformulas.push_back(boost::any_cast<std::shared_ptr<Formula>>(subF->accept(*
this, data)));
121 return std::static_pointer_cast<Formula>(std::make_shared<MultiObjectiveFormula>(subformulas));
125 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
126 return std::static_pointer_cast<Formula>(std::make_shared<QuantileFormula>(f.
getBoundVariables(), subformula));
130 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
131 return std::static_pointer_cast<Formula>(std::make_shared<NextFormula>(subformula));
135 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
136 return std::static_pointer_cast<Formula>(std::make_shared<ProbabilityOperatorFormula>(subformula, f.
getOperatorInformation()));
140 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
145 return std::static_pointer_cast<Formula>(std::make_shared<TotalRewardFormula>(f));
149 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
150 return std::static_pointer_cast<Formula>(std::make_shared<UnaryBooleanStateFormula>(f.
getOperator(), subformula));
154 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().
accept(*
this, data));
155 return std::static_pointer_cast<Formula>(std::make_shared<UnaryBooleanPathFormula>(f.
getOperator(), subformula));
159 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().
accept(*
this, data));
160 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().
accept(*
this, data));
161 return std::static_pointer_cast<Formula>(std::make_shared<UntilFormula>(left, right));
165 std::shared_ptr<HOAPathFormula> result = std::make_shared<HOAPathFormula>(f.
getAutomatonFile());
167 std::shared_ptr<Formula> clonedExpression = boost::any_cast<std::shared_ptr<Formula>>(mapped.second->accept(*
this, data));
168 result->addAPMapping(mapped.first, clonedExpression);
170 return std::static_pointer_cast<Formula>(result);
std::shared_ptr< Formula > clone(Formula const &f) const
virtual boost::any visit(AtomicExpressionFormula const &f, boost::any const &data) const override