10 : numberOfAcceptanceSets(numberOfAcceptanceSets), acceptance(acceptance) {
12 for (
unsigned int i = 0; i < numberOfAcceptanceSets; i++) {
18 return numberOfAcceptanceSets;
22 return acceptanceSets.at(index);
26 return acceptanceSets.at(index);
38 switch (expr->getType()) {
39 case acceptance_expr::EXP_AND:
41 case acceptance_expr::EXP_OR:
43 case acceptance_expr::EXP_NOT:
45 case acceptance_expr::EXP_TRUE:
47 case acceptance_expr::EXP_FALSE:
49 case acceptance_expr::EXP_ATOM: {
50 const cpphoafparser::AtomAcceptance& atom = expr->getAtom();
52 bool negated = atom.isNegated();
54 switch (atom.getType()) {
55 case cpphoafparser::AtomAcceptance::TEMPORAL_INF:
57 for (
auto& state : scc) {
58 if (acceptanceSet.
get(state)) {
64 case cpphoafparser::AtomAcceptance::TEMPORAL_FIN:
66 for (
auto& state : scc) {
67 if (acceptanceSet.
get(state)) {
75 return (negated ? !rv : rv);
79 throw std::runtime_error(
"Missing case statement");
83 std::vector<std::vector<AcceptanceCondition::acceptance_expr::ptr>> dnf;
90void AcceptanceCondition::extractFromDNFRecursion(AcceptanceCondition::acceptance_expr::ptr e, std::vector<std::vector<acceptance_expr::ptr>>& dnf,
91 bool topLevel)
const {
94 if (e->getLeft()->isOR()) {
95 extractFromDNFRecursion(e->getLeft(), dnf,
true);
98 extractFromDNFRecursion(e->getLeft(), dnf,
false);
101 if (e->getRight()->isOR()) {
102 extractFromDNFRecursion(e->getRight(), dnf,
true);
105 extractFromDNFRecursion(e->getRight(), dnf,
false);
109 extractFromDNFRecursion(e, dnf,
false);
112 if (e->isOR() || e->isNOT()) {
113 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Acceptance condition is not in DNF");
114 }
else if (e->isAND()) {
115 extractFromDNFRecursion(e->getLeft(), dnf,
false);
116 extractFromDNFRecursion(e->getRight(), dnf,
false);
118 dnf.back().push_back(e);
125 for (
unsigned int i = 0; i < numberOfAcceptanceSets; i++) {
129 for (std::size_t prodState = 0; prodState < productNumberOfStates; prodState++) {
130 if (set.
get(mapping(prodState))) {
131 liftedSet.
set(prodState);