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");
595 case OpType::Implies:
615 case OpType::Logarithm:
619 case OpType::NotEqual:
623 case OpType::LessOrEqual:
625 case OpType::Greater:
627 case OpType::GreaterOrEqual:
642 STORM_LOG_THROW(
false, storm::exceptions::InvalidJaniException,
"Operator not supported by Jani");
648 std::unordered_set<std::string>
const& auxiliaryVariables) {
652 ExpressionToJson visitor(constants, globalVariables, localVariables, auxiliaryVariables);
653 return anyToJson(simplifiedExpr.accept(visitor, boost::none));
658 opDecl[
"op"] =
"ite";
680 trc[
"exp"] = std::move(opDecl);
702 for (
auto const& constant : constants) {
703 if (constant.getExpressionVariable() == expression.
getVariable()) {
709 "Expression variable '" << expression.
getVariableName() <<
"' not known in Jani data structures.");
747 val[
"left"] = std::move(numJson);
748 val[
"right"] = std::move(denJson);
758 std::vector<ExportJsonType> elements;
759 uint64_t size = expression.
size()->evaluateAsInt();
760 for (uint64_t i = 0; i < size; ++i) {
761 elements.push_back(
anyToJson(expression.
at(i)->accept(*
this, data)));
763 opDecl[
"elements"] = std::move(elements);
771 opDecl[
"length"] =
anyToJson(expression.
size()->accept(*
this, data));
790 opDecl[
"op"] =
"call";
792 std::vector<ExportJsonType> arguments;
796 opDecl[
"args"] = std::move(arguments);
802 constantDecl[
"constant"] = expression.
asString();
808 std::ofstream stream;
810 toStream(janiModel, formulas, stream, checkValid, compact);
821 exporter.convertModel(janiModel, !compact);
823 exporter.convertProperties(formulas, janiModel);
830 std::vector<ExportJsonType> actionReprs;
831 uint64_t actIndex = 0;
832 for (
auto const& act : actions) {
839 actEntry[
"name"] = act.getName();
840 actionReprs.push_back(actEntry);
855 typeDescr[
"kind"] =
"array";
858 STORM_LOG_THROW(
false, storm::exceptions::IllegalArgumentException,
"Unknown expression type.");
864 std::vector<storm::jani::Constant>
const& constants) {
872 std::vector<bool> varOps(2,
false);
873 for (
int i : {0, 1}) {
877 if ((leq && varOps[0]) || (geq && varOps[1])) {
879 }
else if ((leq && varOps[1]) || (geq && varOps[0])) {
882 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Jani Export for constant constraint " << constraint <<
" is not supported.");
885 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Jani Export for constant constraint " << constraint <<
" is not supported.");
890 std::vector<ExportJsonType> constantDeclarations;
891 for (
auto const& constant : constants) {
893 constantEntry[
"name"] = constant.getName();
895 if (constant.hasConstraint()) {
896 typeDesc[
"kind"] =
"bounded";
898 getBoundsFromConstraints(typeDesc, constant.getExpressionVariable(), constant.getConstraintExpression(), constants);
902 constantEntry[
"type"] = typeDesc;
903 if (constant.isDefined()) {
904 constantEntry[
"value"] =
buildExpression(constant.getExpression(), constants);
906 constantDeclarations.push_back(constantEntry);
917 typeDesc[
"kind"] =
"bounded";
919 switch (bndType.getBaseType()) {
921 typeDesc[
"base"] =
"int";
924 typeDesc[
"base"] =
"real";
927 if (bndType.hasLowerBound()) {
928 typeDesc[
"lower-bound"] =
buildExpression(bndType.getLowerBound(), constants, globalVariables, localVariables);
930 if (bndType.hasUpperBound()) {
931 typeDesc[
"upper-bound"] =
buildExpression(bndType.getUpperBound(), constants, globalVariables, localVariables);
934 typeDesc[
"kind"] =
"array";
937 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"Variable type not recognized in JSONExporter");
944 ExportJsonType variableDeclarations = std::vector<ExportJsonType>();
945 for (
auto const& variable : varSet) {
947 varEntry[
"name"] = variable.getName();
948 if (variable.isTransient()) {
949 varEntry[
"transient"] = variable.isTransient();
951 varEntry[
"type"] =
buildType(variable.getType(), constants, globalVariables, localVariables);
952 if (variable.hasInitExpression()) {
953 varEntry[
"initial-value"] =
buildExpression(variable.getInitExpression(), constants, globalVariables, localVariables);
955 variableDeclarations.push_back(std::move(varEntry));
957 return variableDeclarations;
961 std::vector<storm::jani::Constant>
const& constants,
VariableSet const& globalVariables,
963 ExportJsonType functionDeclarations = std::vector<ExportJsonType>();
964 for (
auto const& nameFunDef : functionDefinitions) {
967 funDefJson[
"name"] = nameFunDef.first;
969 std::vector<ExportJsonType> parameterDeclarations;
970 std::unordered_set<std::string> parameterNames;
973 parDefJson[
"name"] = p.getName();
974 parameterNames.insert(p.getName());
976 parameterDeclarations.push_back(parDefJson);
978 funDefJson[
"parameters"] = parameterDeclarations;
980 functionDeclarations.push_back(std::move(funDefJson));
982 return functionDeclarations;
996 result[
"exp"] = std::move(subLValue);
997 result[
"index"] =
buildExpression(indexExpr, constants, globalVariables, localVariables);
1005 ExportJsonType assignmentDeclarations = std::vector<ExportJsonType>();
1007 for (
auto const& assignment : orderedAssignments) {
1009 assignmentEntry[
"ref"] =
buildLValue(assignment.getLValue(), constants, globalVariables, localVariables);
1010 assignmentEntry[
"value"] =
buildExpression(assignment.getAssignedExpression(), constants, globalVariables, localVariables);
1012 assignmentEntry[
"index"] = assignment.getLevel();
1014 if (commentExpressions) {
1015 assignmentEntry[
"comment"] = assignment.getLValue().getName() +
" <- " + assignment.getAssignedExpression().toString();
1017 assignmentDeclarations.push_back(std::move(assignmentEntry));
1019 return assignmentDeclarations;
1024 ExportJsonType locationDeclarations = std::vector<ExportJsonType>();
1025 for (
auto const& location : locations) {
1027 locEntry[
"name"] = location.getName();
1028 if (location.hasTimeProgressInvariant()) {
1030 timeProg[
"exp"] =
buildExpression(location.getTimeProgressInvariant(), constants, globalVariables, localVariables);
1031 if (commentExpressions) {
1032 timeProg[
"comment"] = location.getTimeProgressInvariant().toString();
1034 locEntry[
"time-progress"] = std::move(timeProg);
1036 if (!location.getAssignments().empty()) {
1037 locEntry[
"transient-values"] =
buildAssignmentArray(location.getAssignments(), constants, globalVariables, localVariables, commentExpressions);
1039 locationDeclarations.push_back(std::move(locEntry));
1041 return locationDeclarations;
1045 std::vector<std::string> names;
1053 std::vector<storm::jani::Constant>
const& constants,
VariableSet const& globalVariables,
VariableSet const& localVariables,
1054 bool commentExpressions) {
1055 assert(destinations.size() > 0);
1057 for (
auto const& destination : destinations) {
1059 destEntry[
"location"] = locationNames.at(destination.getLocationIndex());
1061 if (destination.getProbability().isLiteral()) {
1067 destEntry[
"probability"][
"exp"] =
buildExpression(destination.getProbability(), constants, globalVariables, localVariables);
1068 if (commentExpressions) {
1069 destEntry[
"probability"][
"comment"] = destination.getProbability().toString();
1072 if (!destination.getOrderedAssignments().empty()) {
1073 destEntry[
"assignments"] =
1074 buildAssignmentArray(destination.getOrderedAssignments(), constants, globalVariables, localVariables, commentExpressions);
1076 destDeclarations.push_back(std::move(destEntry));
1078 return destDeclarations;
1082 std::vector<storm::jani::Constant>
const& constants,
VariableSet const& globalVariables,
VariableSet const& localVariables,
1083 bool commentExpressions) {
1092 if (commentExpressions) {
1098 if (commentExpressions) {
1110 std::map<uint64_t, std::string>
const& locationNames, std::vector<storm::jani::Constant>
const& constants,
1113 for (
auto const& edge : edges) {
1114 if (edge.getGuard().isFalse()) {
1117 edgeDeclarations.push_back(
buildEdge(edge, actionNames, locationNames, constants, globalVariables, localVariables, commentExpressions));
1119 return edgeDeclarations;
1123 std::vector<storm::jani::Constant>
const& constants,
VariableSet const& globalVariables,
bool commentExpressions) {
1124 ExportJsonType automataDeclarations = std::vector<ExportJsonType>();
1125 for (
auto const& automaton : automata) {
1127 autoEntry[
"name"] = automaton.getName();
1128 autoEntry[
"variables"] =
buildVariablesArray(automaton.getVariables(), constants, globalVariables, automaton.getVariables());
1129 if (!automaton.getFunctionDefinitions().empty()) {
1130 autoEntry[
"functions"] =
buildFunctionsArray(automaton.getFunctionDefinitions(), constants, globalVariables, automaton.getVariables());
1132 if (automaton.hasRestrictedInitialStates()) {
1133 autoEntry[
"restrict-initial"][
"exp"] =
1134 buildExpression(automaton.getInitialStatesRestriction(), constants, globalVariables, automaton.getVariables());
1136 autoEntry[
"locations"] =
buildLocationsArray(automaton.getLocations(), constants, globalVariables, automaton.getVariables(), commentExpressions);
1138 autoEntry[
"edges"] =
buildEdges(automaton.getEdges(), actionNames, automaton.buildIdToLocationNameMap(), constants, globalVariables,
1139 automaton.getVariables(), commentExpressions);
1140 automataDeclarations.push_back(std::move(autoEntry));
1142 return automataDeclarations;
1145void JsonExporter::convertModel(
storm::jani::Model const& janiModel,
bool commentExpressions) {
1148 jsonStruct[
"name"] = janiModel.
getName();
1163 auto const& automaton = janiModel.
getAutomaton(automatonIndex);
1191 STORM_LOG_THROW(
false, storm::exceptions::IllegalArgumentException,
"Unknown FilterType");
1196 propDecl[
"states"][
"op"] =
"initial";
1197 propDecl[
"op"] =
"filter";
1203void JsonExporter::convertProperties(std::vector<storm::jani::Property>
const& formulas,
storm::jani::Model const& model) {
1208 if (formulas.empty()) {
1209 jsonStruct[
"properties"] =
ExportJsonType(ExportJsonType::value_t::array);
1213 for (
auto const& f : formulas) {
1215 propDecl[
"name"] = f.getName();
1217 properties.push_back(std::move(propDecl));
1219 jsonStruct[
"properties"] = std::move(properties);
1223 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