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