You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

140 lines
4.3 KiB

/*
* PrctlFormulaAction.h
*
* Created on: Jun 6, 2014
* Author: Manuel Sascha Weiand
*/
#ifndef STORM_FORMULA_ACTION_FORMULAACTION_H_
#define STORM_FORMULA_ACTION_FORMULAACTION_H_
#include "src/properties/actions/AbstractAction.h"
#include "src/properties/prctl/AbstractStateFormula.h"
#include "src/properties/csl/AbstractStateFormula.h"
#include <string>
namespace storm {
namespace properties {
namespace action {
/*!
* The Formula action deselects all states that do not satisfy the given state formula.
*
* @note Since there is no modelchecker implemented for Ltl formulas (except the abstract base class)
* the formula action currently only supports Prctl and Csl state formulas.
*/
template <class T>
class FormulaAction : public AbstractAction<T> {
// Convenience typedef to make the code more readable.
typedef typename AbstractAction<T>::Result Result;
public:
/*!
* Constructs an empty FormulaAction.
*
* The evaluation will do nothing and return the Result as it was put in.
*/
FormulaAction() : prctlFormula(nullptr), cslFormula(nullptr) {
//Intentionally left empty.
}
/*!
* Constructs a FormulaAction using the given Prctl formula.
*
* @param prctlFormula The Prctl state formula used to filter the selection during evaluation.
*/
FormulaAction(std::shared_ptr<storm::properties::prctl::AbstractStateFormula<T>> const & prctlFormula) : prctlFormula(prctlFormula), cslFormula(nullptr) {
//Intentionally left empty.
}
/*!
* Constructs a FormulaAction using the given Csl formula.
*
* @param cslFormula The Csl state formula used to filter the selection during evaluation.
*/
FormulaAction(std::shared_ptr<storm::properties::csl::AbstractStateFormula<T>> const & cslFormula) : prctlFormula(nullptr), cslFormula(cslFormula) {
//Intentionally left empty.
}
/*!
* The virtual destructor.
* To ensure that the right destructor is called.
*/
virtual ~FormulaAction() {
// Intentionally left empty.
}
/*!
* Evaluate the action for an Prctl formula.
*
* @param result The Result struct on which the action is to be evaluated.
* @param mc The Prctl modelchecker that computed the path- or stateResult contained in the Result struct.
* @returns A Result struct containing the output of the action.
*/
virtual Result evaluate(Result const & result, storm::modelchecker::prctl::AbstractModelChecker<T> const & mc) const override {
storm::storage::BitVector selection(result.selection);
//Compute the modelchecking results of the actions state formula and deselect all states that do not satisfy it.
if(prctlFormula.get() != nullptr) {
selection = selection & prctlFormula->check(mc);
}
return Result(selection, result.stateMap, result.pathResult, result.stateResult);
}
/*!
* Evaluate the action for an Csl formula.
*
* @param result The Result struct on which the action is to be evaluated.
* @param mc The Csl modelchecker that computed the path- or stateResult contained in the Result struct.
* @returns A Result struct containing the output of the action.
*/
virtual Result evaluate(Result const & result, storm::modelchecker::csl::AbstractModelChecker<T> const & mc) const override {
storm::storage::BitVector selection(result.selection);
//Compute the modelchecking results of the actions state formula and deselect all states that do not satisfy it.
if(cslFormula.get() != nullptr) {
selection = selection & cslFormula->check(mc);
}
return Result(selection, result.stateMap, result.pathResult, result.stateResult);
}
/*!
* Returns a string representation of this action.
*
* @returns A string representing this action.
*/
virtual std::string toString() const override {
std::string out = "formula(";
if(prctlFormula.get() != nullptr) {
out += prctlFormula->toString();
} else if(cslFormula.get() != nullptr) {
out += cslFormula->toString();
}
out += ")";
return out;
}
private:
// The Prctl state formula used during evaluation.
std::shared_ptr<storm::properties::prctl::AbstractStateFormula<T>> prctlFormula;
// The Csl state formula used during evaluation.
std::shared_ptr<storm::properties::csl::AbstractStateFormula<T>> cslFormula;
};
} //namespace action
} //namespace properties
} //namespace storm
#endif /* STORM_FORMULA_ACTION_FORMULAACTION_H_ */