#ifndef STORM_STORAGE_PRISM_PROGRAM_H_ #define STORM_STORAGE_PRISM_PROGRAM_H_ #include #include #include #include #include "src/storage/expressions/Expression.h" #include "src/storage/prism/Constant.h" #include "src/storage/prism/Formula.h" #include "src/storage/prism/Label.h" #include "src/storage/prism/Module.h" #include "src/storage/prism/RewardModel.h" namespace storm { namespace prism { class Program : public LocatedInformation { public: /*! * An enum for the different model types. */ enum class ModelType {UNDEFINED, DTMC, CTMC, MDP, CTMDP, MA}; /*! * Creates a program with the given model type, undefined constants, global variables, modules, reward * models, labels and initial states. * * @param modelType The type of the program. * @param constants The constants of the program. * @param globalBooleanVariables The global boolean variables of the program. * @param globalIntegerVariables The global integer variables of the program. * @param formulas The formulas defined in the program. * @param modules The modules of the program. * @param hasInitialStatesExpression A flag indicating whether the program specifies its initial states via * an explicit initial construct. * @param initialStatesExpression If the model specifies an explicit initial construct, this * expression defines its initial states. Otherwise it is irrelevant and may be set to an arbitrary (but * valid) expression, e.g. false. * @param rewardModels The reward models of the program. * @param labels The labels defined for this program. * @param filename The filename in which the program is defined. * @param lineNumber The line number in which the program is defined. */ Program(ModelType modelType, std::vector const& constants, std::vector const& globalBooleanVariables, std::vector const& globalIntegerVariables, std::vector const& formulas, std::vector const& modules, std::vector const& rewardModels, bool hasInitialStatesExpression, storm::expressions::Expression const& initialStatesExpression, std::vector