Browse Source
Added BoundedEventually as a convenience operator.
Added BoundedEventually as a convenience operator.
Included check for illegal atomic propositions. Added exception class to be raised in case a property is invalid for the respective model.tempestpy_adaptions
dehnert
12 years ago
8 changed files with 214 additions and 10 deletions
-
26src/exceptions/InvalidPropertyException.h
-
151src/formula/BoundedEventually.h
-
2src/formula/BoundedUntil.h
-
1src/formula/Formulas.h
-
23src/modelChecker/DtmcPrctlModelChecker.h
-
8src/modelChecker/GmmxxDtmcPrctlModelChecker.h
-
9src/models/Dtmc.h
-
4src/storm.cpp
@ -0,0 +1,26 @@ |
|||||
|
/* |
||||
|
* InvalidPropertyException.h |
||||
|
* |
||||
|
* Created on: 27.12.2012 |
||||
|
* Author: Christian Dehnert |
||||
|
*/ |
||||
|
|
||||
|
#ifndef STORM_EXCEPTIONS_INVALIDPROPERTYEXCEPTION_H_ |
||||
|
#define STORM_EXCEPTIONS_INVALIDPROPERTYEXCEPTION_H_ |
||||
|
|
||||
|
#include "src/exceptions/BaseException.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
|
||||
|
namespace exceptions { |
||||
|
|
||||
|
/*! |
||||
|
* @brief This exception is thrown when a parameter is invalid in this context |
||||
|
*/ |
||||
|
STORM_EXCEPTION_DEFINE_NEW(InvalidPropertyException) |
||||
|
|
||||
|
} // namespace exceptions |
||||
|
|
||||
|
} // namespace storm |
||||
|
|
||||
|
#endif /* STORM_EXCEPTIONS_INVALIDPROPERTYEXCEPTION_H_ */ |
@ -0,0 +1,151 @@ |
|||||
|
/* |
||||
|
* BoundedUntil.h |
||||
|
* |
||||
|
* Created on: 27.11.2012 |
||||
|
* Author: Christian Dehnert |
||||
|
*/ |
||||
|
|
||||
|
#ifndef STORM_FORMULA_BOUNDEDEVENTUALLY_H_ |
||||
|
#define STORM_FORMULA_BOUNDEDEVENTUALLY_H_ |
||||
|
|
||||
|
#include "PctlPathFormula.h" |
||||
|
#include "PctlStateFormula.h" |
||||
|
#include "boost/integer/integer_mask.hpp" |
||||
|
#include <string> |
||||
|
|
||||
|
namespace storm { |
||||
|
|
||||
|
namespace formula { |
||||
|
|
||||
|
/*! |
||||
|
* @brief |
||||
|
* Class for a PCTL (path) formula tree with a BoundedEventually node as root. |
||||
|
* |
||||
|
* Has one PCTL state formulas as sub formula/tree. |
||||
|
* |
||||
|
* @par Semantics |
||||
|
* The formula holds iff in at most \e bound steps, formula \e child holds. |
||||
|
* |
||||
|
* The subtrees are seen as part of the object and deleted with the object |
||||
|
* (this behavior can be prevented by setting them to NULL before deletion) |
||||
|
* |
||||
|
* @see PctlPathFormula |
||||
|
* @see PctlFormula |
||||
|
*/ |
||||
|
template <class T> |
||||
|
class BoundedEventually : public PctlPathFormula<T> { |
||||
|
|
||||
|
public: |
||||
|
/*! |
||||
|
* Empty constructor |
||||
|
*/ |
||||
|
BoundedEventually() { |
||||
|
this->child = nullptr; |
||||
|
bound = 0; |
||||
|
} |
||||
|
|
||||
|
/*! |
||||
|
* Constructor |
||||
|
* |
||||
|
* @param child The child formula subtree |
||||
|
* @param bound The maximal number of steps |
||||
|
*/ |
||||
|
BoundedEventually(PctlStateFormula<T>* child, uint_fast64_t bound) { |
||||
|
this->child = child; |
||||
|
this->bound = bound; |
||||
|
} |
||||
|
|
||||
|
/*! |
||||
|
* Destructor. |
||||
|
* |
||||
|
* Also deletes the subtrees. |
||||
|
* (this behaviour can be prevented by setting the subtrees to NULL before deletion) |
||||
|
*/ |
||||
|
virtual ~BoundedEventually() { |
||||
|
if (child != nullptr) { |
||||
|
delete child; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/*! |
||||
|
* @returns the child node |
||||
|
*/ |
||||
|
const PctlStateFormula<T>& getChild() const { |
||||
|
return *child; |
||||
|
} |
||||
|
|
||||
|
/*! |
||||
|
* Sets the subtree |
||||
|
* @param child the new child node |
||||
|
*/ |
||||
|
void setChild(PctlStateFormula<T>* child) { |
||||
|
this->child = child; |
||||
|
} |
||||
|
|
||||
|
/*! |
||||
|
* @returns the maximally allowed number of steps for the bounded until operator |
||||
|
*/ |
||||
|
uint_fast64_t getBound() const { |
||||
|
return bound; |
||||
|
} |
||||
|
|
||||
|
/*! |
||||
|
* Sets the maximally allowed number of steps for the bounded until operator |
||||
|
* |
||||
|
* @param bound the new bound. |
||||
|
*/ |
||||
|
void setBound(uint_fast64_t bound) { |
||||
|
this->bound = bound; |
||||
|
} |
||||
|
|
||||
|
/*! |
||||
|
* @returns a string representation of the formula |
||||
|
*/ |
||||
|
virtual std::string toString() const { |
||||
|
std::string result = "F<="; |
||||
|
result += std::to_string(bound); |
||||
|
result += " "; |
||||
|
result += child->toString(); |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
/*! |
||||
|
* Clones the called object. |
||||
|
* |
||||
|
* Performs a "deep copy", i.e. the subtrees of the new object are clones of the original ones |
||||
|
* |
||||
|
* @returns a new BoundedUntil-object that is identical the called object. |
||||
|
*/ |
||||
|
virtual PctlPathFormula<T>* clone() const { |
||||
|
BoundedEventually<T>* result = new BoundedEventually<T>(); |
||||
|
result->setBound(bound); |
||||
|
if (child != nullptr) { |
||||
|
result->setRight(child->clone()); |
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/*! |
||||
|
* Calls the model checker to check this formula. |
||||
|
* Needed to infer the correct type of formula class. |
||||
|
* |
||||
|
* @note This function should only be called in a generic check function of a model checker class. For other uses, |
||||
|
* the methods of the model checker should be used. |
||||
|
* |
||||
|
* @returns A vector indicating the probability that the formula holds for each state. |
||||
|
*/ |
||||
|
virtual std::vector<T> *check(const storm::modelChecker::DtmcPrctlModelChecker<T>& modelChecker) const { |
||||
|
return modelChecker.checkBoundedEventually(*this); |
||||
|
} |
||||
|
|
||||
|
private: |
||||
|
PctlStateFormula<T>* child; |
||||
|
uint_fast64_t bound; |
||||
|
}; |
||||
|
|
||||
|
} //namespace formula |
||||
|
|
||||
|
} //namespace storm |
||||
|
|
||||
|
#endif /* STORM_FORMULA_BOUNDEDUNTIL_H_ */ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue