45 boost::any tmp(std::move(input));
46 ExportJsonType res = std::move(*boost::any_cast<ExportJsonType>(&tmp));
52 std::unordered_set<std::string>
const& auxiliaryVariables = {}) {
70 std::vector<ExportJsonType> elements;
71 elements.push_back(autDecl);
72 compDecl[
"elements"] = elements;
79 std::vector<ExportJsonType> elems;
82 if (subcomp->isAutomatonComposition()) {
83 elemDecl[
"automaton"] = std::static_pointer_cast<AutomatonComposition>(subcomp)->getAutomatonName();
85 STORM_LOG_THROW(allowRecursion, storm::exceptions::InvalidJaniException,
"Nesting composition " << *subcomp <<
" is not supported by JANI.");
86 elemDecl =
anyToJson(subcomp->accept(*
this, data));
88 elems.push_back(elemDecl);
90 compDecl[
"elements"] = elems;
91 std::vector<ExportJsonType> synElems;
94 syncDecl[
"synchronise"] = std::vector<std::string>();
95 for (
auto const& syncIn : syncs.getInput()) {
97 syncDecl[
"synchronise"].push_back(
nullptr);
99 syncDecl[
"synchronise"].push_back(syncIn);
102 syncDecl[
"result"] = syncs.getOutput();
103 synElems.push_back(syncDecl);
105 if (!synElems.empty()) {
106 compDecl[
"syncs"] = synElems;
127 STORM_LOG_THROW(
false, storm::exceptions::IllegalArgumentException,
"Unknown ComparisonType");
130ExportJsonType FormulaToJaniJson::constructPropertyInterval(boost::optional<storm::expressions::Expression>
const& lower,
131 boost::optional<bool>
const& lowerExclusive,
132 boost::optional<storm::expressions::Expression>
const& upper,
133 boost::optional<bool>
const& upperExclusive)
const {
134 STORM_LOG_THROW((lower.is_initialized() || upper.is_initialized()), storm::exceptions::InvalidJaniException,
135 "PropertyInterval needs either a lower or an upper bound, but none was given.");
136 STORM_LOG_THROW((lower.is_initialized() || !lowerExclusive.is_initialized()), storm::exceptions::InvalidJaniException,
137 "PropertyInterval defines wether the lower bound is exclusive but no lower bound is given.");
138 STORM_LOG_THROW((upper.is_initialized() || !upperExclusive.is_initialized()), storm::exceptions::InvalidJaniException,
139 "PropertyInterval defines wether the upper bound is exclusive but no upper bound is given.");
144 if (lowerExclusive) {
145 iDecl[
"lower-exclusive"] = *lowerExclusive;
150 if (upperExclusive) {
151 iDecl[
"upper-exclusive"] = *upperExclusive;
158 std::string
const& rewardModelName)
const {
161 bool steps = rewardAccumulation.
isStepsSet() && (info.hasActionRewards() || info.hasTransitionRewards());
163 bool exit = rewardAccumulation.
isExitSet() && info.hasStateRewards();
169 std::vector<std::string> res;
171 res.push_back(
"steps");
174 res.push_back(
"time");
177 stateExitRewards =
true;
178 res.push_back(
"exit");
183ExportJsonType FormulaToJaniJson::constructStandardRewardAccumulation(std::string
const& rewardModelName)
const {
201 return stateExitRewards;
215 opDecl[
"op"] = op == storm::logic::BinaryBooleanStateFormula::OperatorType::And ?
"∧" :
"∨";
223 opDecl[
"op"] = op == storm::logic::BinaryBooleanPathFormula::OperatorType::And ?
"∧" :
"∨";
234 "Jani export of multi-dimensional bounded until formulas is not supported.");
240 bool hasStepBounds(
false), hasTimeBounds(
false);
241 std::vector<ExportJsonType> rewardBounds;
244 boost::optional<storm::expressions::Expression> lower, upper;
245 boost::optional<bool> lowerExclusive, upperExclusive;
254 ExportJsonType propertyInterval = constructPropertyInterval(lower, lowerExclusive, upper, upperExclusive);
258 STORM_LOG_THROW(!hasStepBounds, storm::exceptions::NotSupportedException,
259 "Jani export of until formulas with multiple step bounds is not supported.");
260 hasStepBounds =
true;
261 opDecl[
"step-bounds"] = propertyInterval;
262 }
else if (tbr.isRewardBound()) {
265 if (tbr.hasRewardAccumulation()) {
266 rewbound[
"accumulate"] = constructRewardAccumulation(tbr.getRewardAccumulation(), tbr.getRewardName());
268 rewbound[
"accumulate"] = constructStandardRewardAccumulation(tbr.getRewardName());
270 rewbound[
"bounds"] = propertyInterval;
271 rewardBounds.push_back(std::move(rewbound));
273 STORM_LOG_THROW(!hasTimeBounds, storm::exceptions::NotSupportedException,
274 "Jani export of until formulas with multiple time bounds is not supported.");
275 hasTimeBounds =
true;
276 opDecl[
"time-bounds"] = propertyInterval;
279 if (!rewardBounds.empty()) {
286 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Jani currently does not support conditional formulae");
290 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Storm currently does not support translating cumulative reward formulae");
309 auto rewAccJson = constructRewardAccumulation(rewAcc);
315 opDecl[
"left"][
"op"] = f.
getOptimalityType() == storm::solver::OptimizationDirection::Minimize ?
"Emin" :
"Emax";
319 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Unsupported subformula for time operator formula " << f);
322 opDecl[
"left"][
"op"] =
328 opDecl[
"left"][
"accumulate"] = rewAccJson;
332 opDecl[
"op"] = f.
getOptimalityType() == storm::solver::OptimizationDirection::Minimize ?
"Emin" :
"Emax";
336 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Unsupported subformula for time operator formula " << f);
340 opDecl[
"op"] =
"Emin";
344 opDecl[
"accumulate"] = rewAccJson;
357 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Conversion of game formulas to Jani is not supported.");
361 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Jani currently does not support conversion of an instanteneous reward formula");
370 opDecl[
"left"][
"op"] = f.
getOptimalityType() == storm::solver::OptimizationDirection::Minimize ?
"Smin" :
"Smax";
373 opDecl[
"left"][
"op"] =
381 opDecl[
"op"] = f.
getOptimalityType() == storm::solver::OptimizationDirection::Minimize ?
"Smin" :
"Smax";
386 opDecl[
"op"] =
"Smin";
420 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Jani currently does not support conversion of an LRA reward formula");
424 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Jani currently does not support conversion of a multi-objective formula");
428 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Jani currently does not support conversion of a Quantile formula");
436 auto intervalExpressionManager = std::make_shared<storm::expressions::ExpressionManager>();
437 opDecl[
"step-bounds"] = constructPropertyInterval(intervalExpressionManager->integer(1),
false, intervalExpressionManager->integer(1),
false);
448 opDecl[
"left"][
"op"] = f.
getOptimalityType() == storm::solver::OptimizationDirection::Minimize ?
"Pmin" :
"Pmax";
451 opDecl[
"left"][
"op"] =
459 opDecl[
"op"] = f.
getOptimalityType() == storm::solver::OptimizationDirection::Minimize ?
"Pmin" :
"Pmax";
464 opDecl[
"op"] =
"Pmin";
474 std::string instantName;
476 instantName =
"step-instant";
478 instantName =
"time-instant";
481 std::string rewardModelName;
487 if (variable.isTransient()) {
488 rewardModelName = variable.getName();
489 STORM_LOG_WARN(
"Reward model name was not given, assuming the only global real transient variable '" << rewardModelName
490 <<
"' to measure the reward.");
496 STORM_LOG_THROW(!rewardModelName.empty(), storm::exceptions::NotSupportedException,
"Reward name has to be specified for Jani-conversion");
498 std::string opString =
"";
512 opDecl[
"op"] = opString;
519 opDecl[
"accumulate"] = constructStandardRewardAccumulation(rewardModelName);
524 "Export for cumulative reward formulas with reward instant currently unsupported.");
529 opDecl[
"accumulate"] = constructStandardRewardAccumulation(rewardModelName);
537 opDecl[
"accumulate"] = constructStandardRewardAccumulation(rewardModelName);
546 compDecl[
"left"] = std::move(opDecl);
555 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Jani currently does not support a total reward formula");
583 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Jani currently does not support HOA path formulae");
587 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Jani currently does not support discounted cumulative reward formulae");
591 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Jani currently does not support discounted total reward formulae");
603 case OpType::Implies:
623 case OpType::Logarithm:
627 case OpType::NotEqual:
631 case OpType::LessOrEqual:
633 case OpType::Greater:
635 case OpType::GreaterOrEqual:
650 STORM_LOG_THROW(
false, storm::exceptions::InvalidJaniException,
"Operator not supported by Jani");
656 std::unordered_set<std::string>
const& auxiliaryVariables) {
660 ExpressionToJson visitor(constants, globalVariables, localVariables, auxiliaryVariables);
661 return anyToJson(simplifiedExpr.accept(visitor, boost::none));
666 opDecl[
"op"] =
"ite";
688 trc[
"exp"] = std::move(opDecl);
710 for (
auto const& constant : constants) {
711 if (constant.getExpressionVariable() == expression.
getVariable()) {
717 "Expression variable '" << expression.
getVariableName() <<
"' not known in Jani data structures.");
755 val[
"left"] = std::move(numJson);
756 val[
"right"] = std::move(denJson);
766 std::vector<ExportJsonType> elements;
767 uint64_t size = expression.
size()->evaluateAsInt();
768 for (uint64_t i = 0; i < size; ++i) {
769 elements.push_back(
anyToJson(expression.
at(i)->accept(*
this, data)));
771 opDecl[
"elements"] = std::move(elements);
779 opDecl[
"length"] =
anyToJson(expression.
size()->accept(*
this, data));
798 opDecl[
"op"] =
"call";
800 std::vector<ExportJsonType> arguments;
804 opDecl[
"args"] = std::move(arguments);
810 constantDecl[
"constant"] = expression.
asString();
816 std::ofstream stream;
818 toStream(janiModel, formulas, stream, checkValid, compact);
829 exporter.convertModel(janiModel, !compact);
831 exporter.convertProperties(formulas, janiModel);
838 std::vector<ExportJsonType> actionReprs;
839 uint64_t actIndex = 0;
840 for (
auto const& act : actions) {
847 actEntry[
"name"] = act.getName();
848 actionReprs.push_back(actEntry);
863 typeDescr[
"kind"] =
"array";
866 STORM_LOG_THROW(
false, storm::exceptions::IllegalArgumentException,
"Unknown expression type.");
872 std::vector<storm::jani::Constant>
const& constants) {
880 std::vector<bool> varOps(2,
false);
881 for (
int i : {0, 1}) {
885 if ((leq && varOps[0]) || (geq && varOps[1])) {
887 }
else if ((leq && varOps[1]) || (geq && varOps[0])) {
890 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Jani Export for constant constraint " << constraint <<
" is not supported.");
893 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Jani Export for constant constraint " << constraint <<
" is not supported.");
898 std::vector<ExportJsonType> constantDeclarations;
899 for (
auto const& constant : constants) {
901 constantEntry[
"name"] = constant.getName();
903 if (constant.hasConstraint()) {
904 typeDesc[
"kind"] =
"bounded";
906 getBoundsFromConstraints(typeDesc, constant.getExpressionVariable(), constant.getConstraintExpression(), constants);
910 constantEntry[
"type"] = typeDesc;
911 if (constant.isDefined()) {
912 constantEntry[
"value"] =
buildExpression(constant.getExpression(), constants);
914 constantDeclarations.push_back(constantEntry);
925 typeDesc[
"kind"] =
"bounded";
927 switch (bndType.getBaseType()) {
929 typeDesc[
"base"] =
"int";
932 typeDesc[
"base"] =
"real";
935 if (bndType.hasLowerBound()) {
936 typeDesc[
"lower-bound"] =
buildExpression(bndType.getLowerBound(), constants, globalVariables, localVariables);
938 if (bndType.hasUpperBound()) {
939 typeDesc[
"upper-bound"] =
buildExpression(bndType.getUpperBound(), constants, globalVariables, localVariables);
942 typeDesc[
"kind"] =
"array";
945 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Variable type not recognized in JSONExporter");
952 ExportJsonType variableDeclarations = std::vector<ExportJsonType>();
953 for (
auto const& variable : varSet) {
955 varEntry[
"name"] = variable.getName();
956 if (variable.isTransient()) {
957 varEntry[
"transient"] = variable.isTransient();
959 varEntry[
"type"] =
buildType(variable.getType(), constants, globalVariables, localVariables);
960 if (variable.hasInitExpression()) {
961 varEntry[
"initial-value"] =
buildExpression(variable.getInitExpression(), constants, globalVariables, localVariables);
963 variableDeclarations.push_back(std::move(varEntry));
965 return variableDeclarations;
969 std::vector<storm::jani::Constant>
const& constants,
VariableSet const& globalVariables,
971 ExportJsonType functionDeclarations = std::vector<ExportJsonType>();
972 for (
auto const& nameFunDef : functionDefinitions) {
975 funDefJson[
"name"] = nameFunDef.first;
977 std::vector<ExportJsonType> parameterDeclarations;
978 std::unordered_set<std::string> parameterNames;
981 parDefJson[
"name"] = p.getName();
982 parameterNames.insert(p.getName());
984 parameterDeclarations.push_back(parDefJson);
986 funDefJson[
"parameters"] = parameterDeclarations;
988 functionDeclarations.push_back(std::move(funDefJson));
990 return functionDeclarations;
1003 result[
"op"] =
"aa";
1004 result[
"exp"] = std::move(subLValue);
1005 result[
"index"] =
buildExpression(indexExpr, constants, globalVariables, localVariables);
1013 ExportJsonType assignmentDeclarations = std::vector<ExportJsonType>();
1015 for (
auto const& assignment : orderedAssignments) {
1017 assignmentEntry[
"ref"] =
buildLValue(assignment.getLValue(), constants, globalVariables, localVariables);
1018 assignmentEntry[
"value"] =
buildExpression(assignment.getAssignedExpression(), constants, globalVariables, localVariables);
1020 assignmentEntry[
"index"] = assignment.getLevel();
1022 if (commentExpressions) {
1023 assignmentEntry[
"comment"] = assignment.getLValue().getName() +
" <- " + assignment.getAssignedExpression().toString();
1025 assignmentDeclarations.push_back(std::move(assignmentEntry));
1027 return assignmentDeclarations;
1032 ExportJsonType locationDeclarations = std::vector<ExportJsonType>();
1033 for (
auto const& location : locations) {
1035 locEntry[
"name"] = location.getName();
1036 if (location.hasTimeProgressInvariant()) {
1038 timeProg[
"exp"] =
buildExpression(location.getTimeProgressInvariant(), constants, globalVariables, localVariables);
1039 if (commentExpressions) {
1040 timeProg[
"comment"] = location.getTimeProgressInvariant().toString();
1042 locEntry[
"time-progress"] = std::move(timeProg);
1044 if (!location.getAssignments().empty()) {
1045 locEntry[
"transient-values"] =
buildAssignmentArray(location.getAssignments(), constants, globalVariables, localVariables, commentExpressions);
1047 locationDeclarations.push_back(std::move(locEntry));
1049 return locationDeclarations;
1053 std::vector<std::string> names;
1061 std::vector<storm::jani::Constant>
const& constants,
VariableSet const& globalVariables,
VariableSet const& localVariables,
1062 bool commentExpressions) {
1063 assert(destinations.size() > 0);
1065 for (
auto const& destination : destinations) {
1067 destEntry[
"location"] = locationNames.at(destination.getLocationIndex());
1069 if (destination.getProbability().isLiteral()) {
1075 destEntry[
"probability"][
"exp"] =
buildExpression(destination.getProbability(), constants, globalVariables, localVariables);
1076 if (commentExpressions) {
1077 destEntry[
"probability"][
"comment"] = destination.getProbability().toString();
1080 if (!destination.getOrderedAssignments().empty()) {
1081 destEntry[
"assignments"] =
1082 buildAssignmentArray(destination.getOrderedAssignments(), constants, globalVariables, localVariables, commentExpressions);
1084 destDeclarations.push_back(std::move(destEntry));
1086 return destDeclarations;
1090 std::vector<storm::jani::Constant>
const& constants,
VariableSet const& globalVariables,
VariableSet const& localVariables,
1091 bool commentExpressions) {
1100 if (commentExpressions) {
1106 if (commentExpressions) {
1118 std::map<uint64_t, std::string>
const& locationNames, std::vector<storm::jani::Constant>
const& constants,
1121 for (
auto const& edge : edges) {
1122 if (edge.getGuard().isFalse()) {
1125 edgeDeclarations.push_back(
buildEdge(edge, actionNames, locationNames, constants, globalVariables, localVariables, commentExpressions));
1127 return edgeDeclarations;
1131 std::vector<storm::jani::Constant>
const& constants,
VariableSet const& globalVariables,
bool commentExpressions) {
1132 ExportJsonType automataDeclarations = std::vector<ExportJsonType>();
1133 for (
auto const& automaton : automata) {
1135 autoEntry[
"name"] = automaton.getName();
1136 autoEntry[
"variables"] =
buildVariablesArray(automaton.getVariables(), constants, globalVariables, automaton.getVariables());
1137 if (!automaton.getFunctionDefinitions().empty()) {
1138 autoEntry[
"functions"] =
buildFunctionsArray(automaton.getFunctionDefinitions(), constants, globalVariables, automaton.getVariables());
1140 if (automaton.hasRestrictedInitialStates()) {
1141 autoEntry[
"restrict-initial"][
"exp"] =
1142 buildExpression(automaton.getInitialStatesRestriction(), constants, globalVariables, automaton.getVariables());
1144 autoEntry[
"locations"] =
buildLocationsArray(automaton.getLocations(), constants, globalVariables, automaton.getVariables(), commentExpressions);
1146 autoEntry[
"edges"] =
buildEdges(automaton.getEdges(), actionNames, automaton.buildIdToLocationNameMap(), constants, globalVariables,
1147 automaton.getVariables(), commentExpressions);
1148 automataDeclarations.push_back(std::move(autoEntry));
1150 return automataDeclarations;
1153void JsonExporter::convertModel(
storm::jani::Model const& janiModel,
bool commentExpressions) {
1156 jsonStruct[
"name"] = janiModel.
getName();
1171 auto const& automaton = janiModel.
getAutomaton(automatonIndex);
1199 STORM_LOG_THROW(
false, storm::exceptions::IllegalArgumentException,
"Unknown FilterType");
1204 propDecl[
"states"][
"op"] =
"initial";
1205 propDecl[
"op"] =
"filter";
1211void JsonExporter::convertProperties(std::vector<storm::jani::Property>
const& formulas,
storm::jani::Model const& model) {
1216 if (formulas.empty()) {
1217 jsonStruct[
"properties"] =
ExportJsonType(ExportJsonType::value_t::array);
1221 for (
auto const& f : formulas) {
1223 propDecl[
"name"] = f.getName();
1225 properties.push_back(std::move(propDecl));
1227 jsonStruct[
"properties"] = std::move(properties);
1231 jsonStruct[
"features"] = ExportJsonType::parse(modelFeatures.
toString());
Represents an access to an array.
virtual bool isBinaryRelationExpression() const
virtual bool isBinaryBooleanFunctionExpression() const
virtual std::shared_ptr< BaseExpression const > getOperand(uint_fast64_t operandIndex) const
Retrieves the given operand from the expression.
VariableExpression const & asVariableExpression() const
Type const & getType() const
Retrieves the type of the expression.
virtual OperatorType getOperator() const
Retrieves the operator of a function application.
virtual storm::expressions::OperatorType getOperator() const override
Retrieves the operator of a function application.
virtual std::shared_ptr< BaseExpression const > getOperand(uint_fast64_t operandIndex) const override
Retrieves the given operand from the expression.
virtual storm::expressions::OperatorType getOperator() const override
Retrieves the operator of a function application.
virtual storm::expressions::OperatorType getOperator() const override
Retrieves the operator of a function application.
bool getValue() const
Retrieves the value of the boolean literal.
Represents an array of the given size, where the i'th entry is determined by the elementExpression,...
virtual std::shared_ptr< BaseExpression const > size() const override
std::shared_ptr< BaseExpression const > const & getElementExpression() const
storm::expressions::Variable const & getIndexVar() const
Expression simplify() const
Simplifies the expression according to some basic rules.
bool isVariable() const
Retrieves whether the expression is a variable.
Expression getOperand(uint_fast64_t operandIndex) const
Retrieves the given operand from the expression.
BaseExpression const & getBaseExpression() const
Retrieves the base expression underlying this expression object.
std::string toString() const
Converts the expression into a string.
bool isTrue() const
Checks if the expression is equal to the boolean literal true.
Represents an array with a given list of elements.
uint64_t getNumberOfArguments() const
std::shared_ptr< BaseExpression const > getArgument(uint64_t i) const
std::string const & getFunctionIdentifier() const
std::shared_ptr< BaseExpression const > getElseExpression() const
Retrieves the else expression of the if-then-else expression.
std::shared_ptr< BaseExpression const > getCondition() const
Retrieves the condition expression of the if-then-else expression.
std::shared_ptr< BaseExpression const > getThenExpression() const
Retrieves the then expression of the if-then-else expression.
int_fast64_t getValue() const
Retrieves the value of the integer literal.
storm::RationalNumber getValue() const
Retrieves the value of the double literal.
std::string asString() const
Get the Transcendental number as string, like in the Jani file (single character)
Type getElementType() const
Retrieves the element type of the type, provided that it is an Array type.
bool isBooleanType() const
Checks whether this type is a boolean type.
bool isIntegerType() const
Checks whether this type is an integral type.
bool isArrayType() const
Checks whether this type is an array type.
bool isRationalType() const
Checks whether this type is a rational type.
virtual storm::expressions::OperatorType getOperator() const override
Retrieves the operator of a function application.
virtual std::shared_ptr< BaseExpression const > getOperand(uint_fast64_t operandIndex) const override
Retrieves the given operand from the expression.
virtual storm::expressions::OperatorType getOperator() const override
Retrieves the operator of a function application.
Represents an array with a given list of elements.
virtual std::shared_ptr< BaseExpression const > size() const override
virtual std::shared_ptr< BaseExpression const > at(uint64_t i) const override
Variable const & getVariable() const
Retrieves the variable associated with this expression.
std::string const & getVariableName() const
Retrieves the name of the variable associated with this expression.
std::string const & getName() const
Retrieves the name of the variable.
std::string const & getAutomatonName() const
Retrieves the name of the automaton this composition element refers to.
Location const & getLocation(uint64_t index) const
Retrieves the location with the given index.
std::set< uint64_t > const & getInitialLocationIndices() const
Retrieves the indices of the initial locations.
virtual boost::any accept(CompositionVisitor &visitor, boost::any const &data) const =0
virtual boost::any visit(ParallelComposition const &composition, boost::any const &data)
virtual boost::any visit(AutomatonComposition const &composition, boost::any const &)
static ExportJsonType translate(storm::jani::Composition const &comp, bool allowRecursion=true)
CompositionJsonExporter(bool allowRecursion)
bool hasSilentAction() const
Returns whether it contains the silent action.
uint64_t getActionIndex() const
Retrieves the id of the action with which this edge is labeled.
std::vector< EdgeDestination > const & getDestinations() const
Retrieves the destinations of this edge.
bool hasRate() const
Retrieves whether this edge has an associated rate.
uint64_t getSourceLocationIndex() const
Retrieves the index of the source location.
OrderedAssignments const & getAssignments() const
Retrieves the assignments of this edge.
storm::expressions::Expression const & getRate() const
Retrieves the rate of this edge.
storm::expressions::Expression const & getGuard() const
Retrieves the guard of this edge.
virtual boost::any visit(storm::expressions::IfThenElseExpression const &expression, boost::any const &data)
static ExportJsonType translate(storm::expressions::Expression const &expr, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables, std::unordered_set< std::string > const &auxiliaryVariables)
std::shared_ptr< storm::logic::Formula const > const & getFormula() const
storm::modelchecker::FilterType getFilterType() const
storm::expressions::Expression const & getFunctionBody() const
Retrieves the expression that defines the function.
std::vector< storm::expressions::Variable > const & getParameters() const
Retrieves the parameters of the function.
storm::expressions::Type const & getType() const
Retrieves the type of the function.
ArrayType const & asArrayType() const
virtual bool isContinuousType() const
virtual std::string getStringRepresentation() const =0
Retrieves a string representation of the type.
virtual bool isArrayType() const
virtual bool isBoundedType() const
virtual bool isBasicType() const
BoundedType const & asBoundedType() const
virtual bool isClockType() const
static ExportJsonType getEdgeAsJson(storm::jani::Model const &janiModel, uint64_t automatonIndex, uint64_t edgeIndex, bool commentExpressions=true)
static void toFile(storm::jani::Model const &janiModel, std::vector< storm::jani::Property > const &formulas, std::string const &filepath, bool checkValid=true, bool compact=false)
static void toStream(storm::jani::Model const &janiModel, std::vector< storm::jani::Property > const &formulas, std::ostream &ostream, bool checkValid=false, bool compact=false)
std::vector< storm::expressions::Expression > & getArrayIndexVector()
Returns the referred variable. In case of an array access, this is the referred array variable.
bool isArrayAccess() const
Returns true if the lValue refers either to an array variable or to an array access.
storm::jani::Variable const & getVariable() const
To check if the array is fully accessed, so result will be of the most inner child Type....
std::string const & getName() const
Retrieves the name of the location.
std::string toString() const
ModelFeatures & add(ModelFeature const &modelFeature)
void remove(ModelFeature const &modelFeature)
VariableSet & getGlobalVariables()
Retrieves the variables of this automaton.
storm::expressions::Expression getRewardModelExpression(std::string const &identifier) const
Retrieves the defining reward expression of the reward model with the given identifier.
Composition const & getSystemComposition() const
Retrieves the system composition expression.
storm::expressions::Expression const & getInitialStatesRestriction() const
Gets the expression restricting the legal initial values of the global variables.
static const uint64_t SILENT_ACTION_INDEX
The index of the silent action.
std::vector< Automaton > & getAutomata()
Retrieves the automata of the model.
ModelType const & getModelType() const
Retrieves the type of the model.
std::vector< Constant > const & getConstants() const
Retrieves the constants of the model.
std::vector< Action > const & getActions() const
Retrieves the actions of the model.
uint64_t getJaniVersion() const
Retrieves the JANI-version of the model.
void checkValid() const
Checks if the model is valid JANI, which should be verified before any further operations are applied...
std::string const & getName() const
Retrieves the name of the model.
bool isDiscreteTimeModel() const
Determines whether this model is a discrete-time model.
ModelFeatures const & getModelFeatures() const
Retrieves the enabled model features.
Automaton & getAutomaton(std::string const &name)
Retrieves the automaton with the given name.
std::map< uint64_t, std::string > getActionIndexToNameMap() const
Builds a map with action indices mapped to their names.
std::unordered_map< std::string, FunctionDefinition > const & getGlobalFunctionDefinitions() const
Retrieves all global function definitions.
bool hasMultipleLevels(bool onlyTransient=false) const
Checks whether the assignments have several levels.
bool empty(bool onlyTransient=false) const
Retrieves whether this set of assignments is empty.
std::vector< SynchronizationVector > const & getSynchronizationVectors() const
Retrieves the synchronization vectors of the parallel composition.
std::vector< std::shared_ptr< Composition > > const & getSubcompositions() const
Retrieves the subcompositions of the parallel composition.
static const std::string NO_ACTION_INPUT
std::string const & getName() const
Retrieves the name of the variable.
bool hasVariable(std::string const &name) const
Retrieves whether this variable set contains a variable with the given name.
detail::Variables< Variable > getRealVariables()
Retrieves the real variables in this set.
Variable const & getVariable(std::string const &name) const
Retrieves the variable with the given name.
uint64_t getNumberOfRealTransientVariables() const
Retrieves the number of real transient variables in this variable set.
bool isRewardBound() const
#define STORM_LOG_INFO(message)
#define STORM_LOG_WARN(message)
#define STORM_LOG_TRACE(message)
#define STORM_LOG_ASSERT(cond, message)
#define STORM_LOG_WARN_COND(cond, message)
#define STORM_LOG_THROW(cond, exception, message)
void closeFile(std::ofstream &stream)
Close the given file after writing.
void openFile(std::string const &filepath, std::ofstream &filestream, bool append=false, bool silent=false)
Open the given file for writing.
ExportJsonType buildAutomataArray(std::vector< storm::jani::Automaton > const &automata, std::map< uint64_t, std::string > const &actionNames, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, bool commentExpressions)
ExportJsonType buildEdge(Edge const &edge, std::map< uint64_t, std::string > const &actionNames, std::map< uint64_t, std::string > const &locationNames, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables, bool commentExpressions)
ExportJsonType buildTypeDescription(storm::expressions::Type const &type)
ExportJsonType buildFunctionsArray(std::unordered_map< std::string, FunctionDefinition > const &functionDefinitions, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables=VariableSet())
ExportJsonType convertFilterExpression(storm::jani::FilterExpression const &fe, storm::jani::Model const &model, storm::jani::ModelFeatures &modelFeatures)
storm::json< storm::RationalNumber > ExportJsonType
ExportJsonType buildDestinations(std::vector< EdgeDestination > const &destinations, std::map< uint64_t, std::string > const &locationNames, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables, bool commentExpressions)
std::string comparisonTypeToJani(storm::logic::ComparisonType ct)
ExportJsonType buildLValue(storm::jani::LValue const &lValue, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables)
ExportJsonType buildAssignmentArray(storm::jani::OrderedAssignments const &orderedAssignments, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables, bool commentExpressions)
ExportJsonType buildInitialLocations(storm::jani::Automaton const &automaton)
ExportJsonType buildActionArray(std::vector< storm::jani::Action > const &actions)
ExportJsonType buildExpression(storm::expressions::Expression const &exp, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables=VariableSet(), VariableSet const &localVariables=VariableSet(), std::unordered_set< std::string > const &auxiliaryVariables={})
ExportJsonType buildType(storm::jani::JaniType const &type, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables=VariableSet())
ExportJsonType buildConstantsArray(std::vector< storm::jani::Constant > const &constants)
std::string to_string(ModelType const &type)
std::string janiFilterTypeString(storm::modelchecker::FilterType const &ft)
storm::expressions::Expression reduceNestingInJaniExpression(storm::expressions::Expression const &expression)
ExportJsonType anyToJson(boost::any &&input)
ExportJsonType buildEdges(std::vector< Edge > const &edges, std::map< uint64_t, std::string > const &actionNames, std::map< uint64_t, std::string > const &locationNames, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables, bool commentExpressions)
ExportJsonType buildVariablesArray(storm::jani::VariableSet const &varSet, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables=VariableSet())
ExportJsonType buildLocationsArray(std::vector< storm::jani::Location > const &locations, std::vector< storm::jani::Constant > const &constants, VariableSet const &globalVariables, VariableSet const &localVariables, bool commentExpressions)
std::string operatorTypeToJaniString(storm::expressions::OperatorType optype)
void getBoundsFromConstraints(ExportJsonType &typeDesc, storm::expressions::Variable const &var, storm::expressions::Expression const &constraint, std::vector< storm::jani::Constant > const &constants)
bool isLowerBound(ComparisonType t)
BinaryBooleanOperatorType
bool constexpr minimize(OptimizationDirection d)
bool isOne(ValueType const &a)
std::pair< ValueType, ValueType > asFraction(ValueType const &number)
bool isJsonNumberExportAccurate(storm::json< ValueType > const &j)
std::string dumpJson(storm::json< ValueType > const &j, bool compact)
Dumps the given json object, producing a String.
ComparisonType comparisonType