4#include "boost/variant.hpp"
23 explicit AutomatonInfo();
24 std::set<uint64_t> potentiallyPartOfProp;
47 bool isEliminable(
const std::string &automatonName, std::string
const &locationName);
48 bool hasLoops(
const std::string &automatonName, std::string
const &locationName);
49 bool hasNamedActions(
const std::string &automatonName, std::string
const &locationName);
50 bool isPossiblyInitial(
const std::string &automatonName, std::string
const &locationName);
51 bool isPartOfProp(
const std::string &automatonName, std::string
const &locationName);
52 bool isPartOfProp(
const std::string &automatonName, uint64_t locationIndex);
53 bool computeIsPartOfProp(
const std::string &automatonName,
const std::string &locationName);
55 bool computeIsPartOfProp(
const std::map<expressions::Variable, expressions::Expression> &substitutionMap);
69 std::map<std::string, AutomatonInfo> automataInfo;
70 std::set<uint_fast64_t> expressionVarsInProperty;
85 void addAction(std::unique_ptr<Action> action);
88 std::queue<std::unique_ptr<Action>> actionQueue;
93 explicit JaniLocalEliminator(
Model const &original, std::vector<storm::jani::Property> &properties,
bool addMissingGuards =
false);
99 Model const &original;
102 bool addMissingGuards;
virtual ~Action()=default
virtual void doAction(Session &session)=0
virtual std::string getDescription()=0
void addAction(std::unique_ptr< Action > action)
std::unique_ptr< Action > getNextAction()
bool computeIsPartOfProp(const std::string &automatonName, const std::string &locationName)
expressions::Expression getNewGuard(const Edge &edge, const EdgeDestination &dest, const Edge &outgoing)
bool hasLoops(const std::string &automatonName, std::string const &locationName)
void setPartOfProp(const std::string &automatonName, const std::string &locationName, bool isPartOfProp)
expressions::Expression getProbability(const EdgeDestination &first, const EdgeDestination &then)
bool hasNamedActions(const std::string &automatonName, std::string const &locationName)
bool isPartOfProp(const std::string &automatonName, std::string const &locationName)
bool isPossiblyInitial(const std::string &automatonName, std::string const &locationName)
bool isVariablePartOfProperty(const std::string &expressionVariableName)
void addMissingGuards(const std::string &automatonName)
void setFinished(bool finished)
AutomatonInfo & getAutomatonInfo(const std::string &name)
void clearIsPartOfProp(const std::string &automatonName)
bool isEliminable(const std::string &automatonName, std::string const &locationName)
std::set< std::string > rewardModels
OrderedAssignments executeInSequence(const EdgeDestination &first, const EdgeDestination &then, std::set< std::string > &rewardVariables)
void setModel(const Model &model)
void eliminate(bool flatten=true)
Model const & getResult()
static Model eliminateAutomatically(const Model &model, std::vector< jani::Property > properties, uint64_t locationHeuristic, uint64_t edgesHeuristic)
EliminationScheduler scheduler