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.
 
 
 
 

164 lines
6.7 KiB

#ifndef STORM_LOGIC_FORMULA_H_
#define STORM_LOGIC_FORMULA_H_
#include <memory>
#include <iostream>
#include "src/modelchecker/CheckResult.h"
namespace storm {
namespace logic {
// Forward-declare all formula classes.
class PathFormula;
class StateFormula;
class BinaryStateFormula;
class UnaryStateFormula;
class BinaryBooleanStateFormula;
class UnaryBooleanStateFormula;
class BooleanLiteralFormula;
class AtomicExpressionFormula;
class AtomicLabelFormula;
class UntilFormula;
class BoundedUntilFormula;
class EventuallyFormula;
class GloballyFormula;
class BinaryPathFormula;
class UnaryPathFormula;
class ConditionalPathFormula;
class NextFormula;
class SteadyStateOperatorFormula;
class PathRewardFormula;
class CumulativeRewardFormula;
class InstantaneousRewardFormula;
class ReachabilityRewardFormula;
class ProbabilityOperatorFormula;
class RewardOperatorFormula;
// Also foward-declare base model checker class.
class ModelChecker;
class Formula {
public:
// Make the destructor virtual to allow deletion of objects of subclasses via a pointer to this class.
virtual ~Formula() {
// Intentionally left empty.
};
friend std::ostream& operator<<(std::ostream& out, Formula const& formula);
// Methods for querying the exact formula type.
virtual bool isPathFormula() const;
virtual bool isStateFormula() const;
virtual bool isBinaryStateFormula() const;
virtual bool isUnaryStateFormula() const;
virtual bool isBinaryBooleanStateFormula() const;
virtual bool isUnaryBooleanStateFormula() const;
virtual bool isBooleanLiteralFormula() const;
virtual bool isTrue() const;
virtual bool isFalse() const;
virtual bool isAtomicExpressionFormula() const;
virtual bool isAtomicLabelFormula() const;
virtual bool isUntilFormula() const;
virtual bool isBoundedUntilFormula() const;
virtual bool isEventuallyFormula() const;
virtual bool isGloballyFormula() const;
virtual bool isBinaryPathFormula() const;
virtual bool isUnaryPathFormula() const;
virtual bool isConditionalPathFormula() const;
virtual bool isNextFormula() const;
virtual bool isSteadyStateOperatorFormula() const;
virtual bool isPathRewardFormula() const;
virtual bool isCumulativeRewardFormula() const;
virtual bool isInstantaneousRewardFormula() const;
virtual bool isReachabilityRewardFormula() const;
virtual bool isProbabilityOperator() const;
virtual bool isRewardOperator() const;
virtual bool isPctlPathFormula() const;
virtual bool isPctlStateFormula() const;
virtual bool isPltlFormula() const;
virtual bool isPropositionalFormula() const;
PathFormula& asPathFormula();
PathFormula const& asPathFormula() const;
StateFormula& asStateFormula();
StateFormula const& asStateFormula() const;
BinaryStateFormula& asBinaryStateFormula();
BinaryStateFormula const& asBinaryStateFormula() const;
UnaryStateFormula& asUnaryStateFormula();
UnaryStateFormula const& asUnaryStateFormula() const;
BinaryBooleanStateFormula& asBinaryBooleanStateFormula();
BinaryBooleanStateFormula const& asBinaryBooleanStateFormula() const;
UnaryBooleanStateFormula& asUnaryBooleanStateFormula();
UnaryBooleanStateFormula const& asUnaryBooleanStateFormula() const;
BooleanLiteralFormula& asBooleanLiteralFormula();
BooleanLiteralFormula const& asBooleanLiteralFormula() const;
AtomicExpressionFormula& asAtomicExpressionFormula();
AtomicExpressionFormula const& asAtomicExpressionFormula() const;
AtomicLabelFormula& asAtomicLabelFormula();
AtomicLabelFormula const& asAtomicLabelFormula() const;
UntilFormula& asUntilFormula();
UntilFormula const& asUntilFormula() const;
BoundedUntilFormula& asBoundedUntilFormula();
BoundedUntilFormula const& asBoundedUntilFormula() const;
EventuallyFormula& asEventuallyFormula();
EventuallyFormula const& asEventuallyFormula() const;
GloballyFormula& asGloballyFormula();
GloballyFormula const& asGloballyFormula() const;
BinaryPathFormula& asBinaryPathFormula();
BinaryPathFormula const& asBinaryPathFormula() const;
UnaryPathFormula& asUnaryPathFormula();
UnaryPathFormula const& asUnaryPathFormula() const;
ConditionalPathFormula& asConditionalPathFormula();
ConditionalPathFormula const& asConditionalPathFormula() const;
NextFormula& asNextFormula();
NextFormula const& asNextFormula() const;
SteadyStateOperatorFormula& asSteadyStateFormula();
SteadyStateOperatorFormula const& asSteadyStateFormula() const;
PathRewardFormula& asPathRewardFormula();
PathRewardFormula const& asPathRewardFormula() const;
CumulativeRewardFormula& asCumulativeRewardFormula();
CumulativeRewardFormula const& asCumulativeRewardFormula() const;
InstantaneousRewardFormula& asInstantaneousRewardFormula();
InstantaneousRewardFormula const& asInstantaneousRewardFormula() const;
ReachabilityRewardFormula& asReachabilityRewardFormula();
ReachabilityRewardFormula const& asReachabilityRewardFormula() const;
ProbabilityOperatorFormula& asProbabilityOperatorFormula();
ProbabilityOperatorFormula const& asProbabilityOperatorFormula() const;
RewardOperatorFormula& asRewardOperatorFormula();
RewardOperatorFormula const& asRewardOperatorFormula() const;
virtual std::ostream& writeToStream(std::ostream& out) const = 0;
private:
// Currently empty.
};
std::ostream& operator<<(std::ostream& out, Formula const& formula);
}
}
#endif /* STORM_LOGIC_FORMULA_H_ */