PBerger
12 years ago
6 changed files with 230 additions and 82 deletions
-
1src/formula/Formulas.h
-
176src/formula/ProbabilisticIntervalOperator.h
-
98src/formula/ProbabilisticOperator.h
-
8src/modelChecker/DtmcPrctlModelChecker.cpp
-
27src/modelChecker/DtmcPrctlModelChecker.h
-
2src/modelChecker/GmmxxDtmcPrctlModelChecker.h
@ -0,0 +1,176 @@ |
|||
/* |
|||
* ProbabilisticOperator.h |
|||
* |
|||
* Created on: 19.10.2012 |
|||
* Author: Thomas Heinemann |
|||
*/ |
|||
|
|||
#ifndef PROBABILISTICINTERVALOPERATOR_H_ |
|||
#define PROBABILISTICINTERVALOPERATOR_H_ |
|||
|
|||
#include "PCTLStateFormula.h" |
|||
#include "PCTLPathFormula.h" |
|||
#include "utility/const_templates.h" |
|||
|
|||
namespace mrmc { |
|||
|
|||
namespace formula { |
|||
|
|||
/*! |
|||
* @brief |
|||
* Class for a PCTL formula tree with a P (probablistic) operator node over a probability interval |
|||
* as root. |
|||
* |
|||
* If the probability interval consist just of one single value (i.e. it is [x,x] for some |
|||
* real number x), the class ProbabilisticOperator should be used instead. |
|||
* |
|||
* |
|||
* Has one PCTL path formula as sub formula/tree. |
|||
* |
|||
* @par Semantics |
|||
* The formula holds iff the probability that the path formula holds is inside the bounds |
|||
* specified in this operator |
|||
* |
|||
* The subtree is seen as part of the object and deleted with it |
|||
* (this behavior can be prevented by setting them to NULL before deletion) |
|||
* |
|||
* |
|||
* @see PCTLStateFormula |
|||
* @see PCTLPathFormula |
|||
* @see ProbabilisticOperator |
|||
* @see PCTLFormula |
|||
*/ |
|||
template<class T> |
|||
class ProbabilisticIntervalOperator : public PCTLStateFormula<T> { |
|||
|
|||
public: |
|||
/*! |
|||
* Empty constructor |
|||
*/ |
|||
ProbabilisticIntervalOperator() { |
|||
upper = mrmc::utility::constGetZero(upper); |
|||
lower = mrmc::utility::constGetZero(lower); |
|||
pathFormula = NULL; |
|||
} |
|||
|
|||
/*! |
|||
* Constructor |
|||
* |
|||
* @param lowerBound The lower bound for the probability |
|||
* @param upperBound The upper bound for the probability |
|||
* @param pathFormula The child node |
|||
*/ |
|||
ProbabilisticIntervalOperator(T lowerBound, T upperBound, PCTLPathFormula<T>& pathFormula) { |
|||
this->lower = lowerBound; |
|||
this->upper = upperBound; |
|||
this->pathFormula = &pathFormula; |
|||
} |
|||
|
|||
/*! |
|||
* Destructor |
|||
* |
|||
* The subtree is deleted with the object |
|||
* (this behavior can be prevented by setting them to NULL before deletion) |
|||
*/ |
|||
virtual ~ProbabilisticIntervalOperator() { |
|||
if (pathFormula != NULL) { |
|||
delete pathFormula; |
|||
} |
|||
} |
|||
|
|||
/*! |
|||
* @returns the child node (representation of a PCTL path formula) |
|||
*/ |
|||
const PCTLPathFormula<T>& getPathFormula () const { |
|||
return *pathFormula; |
|||
} |
|||
|
|||
/*! |
|||
* @returns the lower bound for the probability |
|||
*/ |
|||
const T& getLowerBound() const { |
|||
return lower; |
|||
} |
|||
|
|||
/*! |
|||
* @returns the upper bound for the probability |
|||
*/ |
|||
const T& getUpperBound() const { |
|||
return upper; |
|||
} |
|||
|
|||
/*! |
|||
* Sets the child node |
|||
* |
|||
* @param pathFormula the path formula that becomes the new child node |
|||
*/ |
|||
void setPathFormula(PCTLPathFormula<T>* pathFormula) { |
|||
this->pathFormula = pathFormula; |
|||
} |
|||
|
|||
/*! |
|||
* Sets the interval in which the probability that the path formula holds may lie in. |
|||
* |
|||
* @param lowerBound The lower bound for the probability |
|||
* @param upperBound The upper bound for the probability |
|||
*/ |
|||
void setInterval(T lowerBound, T upperBound) { |
|||
this->lower = lowerBound; |
|||
this->upper = upperBound; |
|||
} |
|||
|
|||
/*! |
|||
* @returns a string representation of the formula |
|||
*/ |
|||
virtual std::string toString() const { |
|||
std::string result = "("; |
|||
result += " P["; |
|||
result += lower; |
|||
result += ";"; |
|||
result += upper; |
|||
result += "] "; |
|||
result += pathFormula->toString(); |
|||
result += ")"; |
|||
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 AND-object that is identical the called object. |
|||
*/ |
|||
virtual PCTLStateFormula<T>* clone() const { |
|||
ProbabilisticIntervalOperator<T>* result = new ProbabilisticIntervalOperator<T>(); |
|||
result->setInterval(lower, upper); |
|||
if (pathFormula != NULL) { |
|||
result->setPathFormula(pathFormula->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 bit vector indicating all states that satisfy the formula represented by the called object. |
|||
*/ |
|||
virtual mrmc::storage::BitVector *check(const mrmc::modelChecker::DtmcPrctlModelChecker<T>& modelChecker) const { |
|||
return modelChecker.checkProbabilisticIntervalOperator(this); |
|||
} |
|||
|
|||
private: |
|||
T lower; |
|||
T upper; |
|||
PCTLPathFormula<T>* pathFormula; |
|||
}; |
|||
|
|||
} //namespace formula |
|||
|
|||
} //namespace mrmc |
|||
|
|||
#endif /* PROBABILISTICINTERVALOPERATOR_H_ */ |
@ -1,8 +0,0 @@ |
|||
/*
|
|||
* DtmcPrctlModelChecker.cpp |
|||
* |
|||
* Created on: 22.10.2012 |
|||
* Author: Thomas Heinemann |
|||
*/ |
|||
|
|||
#include "DtmcPrctlModelChecker.h"
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue