32 uint64_t partOfPropCount = 0;
34 std::map<uint64_t, bool> partOfProp;
36 for (uint64_t i = 0; i < automaton.getNumberOfLocations(); i++) {
43 STORM_LOG_TRACE(
"\t\t" + std::to_string(partOfPropCount) +
" old locations potentially satisfy property");
49 if (automatonInfo.hasSink) {
56 if (automatonInfo.hasSink) {
57 automatonInfo.sinkIndex = result.newIndices.excludedLocationsToNewIndices[automatonInfo.sinkIndex];
70 std::set<uint64_t> knownUnsatValues;
73 if (partOfPropCount >= 3) {
74 std::map<expressions::Variable, expressions::Expression> substitutionMap;
76 for (uint64_t i = 0; i < result.newIndices.variableDomain.size(); i++) {
77 substitutionMap[variable] = result.newIndices.variableDomain[i];
79 if (!satisfiesProperty) {
80 knownUnsatValues.emplace(i);
83 STORM_LOG_TRACE(
"\t\t" + std::to_string(knownUnsatValues.size()) +
" variable values never satisfy property");
88 bool avoidChecks =
false;
89 if (partOfPropCount > 5 && automaton.getNumberOfLocations() > partOfPropCount * 5) {
94 uint64_t knownUnsatCounter = 0;
95 uint64_t satisfactionCheckCounter = 0;
96 uint64_t knownSatCounter = 0;
97 uint64_t oldLocationUnsatCounter = 0;
99 for (std::pair<uint64_t, std::map<int64_t, uint64_t>> oldLocMapping : result.newIndices.locationVariableValueMap) {
100 bool oldSatisfied = partOfProp[oldLocMapping.first];
101 for (std::pair<uint64_t, uint64_t> valueIndexPair : oldLocMapping.second) {
104 if (variablePartOfProperty) {
105 if (knownUnsatValues.count(valueIndexPair.first) > 0) {
106 isPartOfProp =
false;
114 satisfactionCheckCounter++;
125 oldLocationUnsatCounter++;
130 uint64_t totalCount = knownUnsatCounter + satisfactionCheckCounter + knownSatCounter + oldLocationUnsatCounter;
131 STORM_LOG_TRACE(
"\t\tPerformed " + std::to_string(satisfactionCheckCounter) +
" property satisfaction checks (location count: " +
132 std::to_string(totalCount) +
"), avoided\n\t\t\t" + std::to_string(oldLocationUnsatCounter) +
" because old location was unsat,\n\t\t\t" +
133 std::to_string(knownSatCounter) +
" because variable was not part of property and old location was sat and\n\t\t\t" +
134 std::to_string(knownUnsatCounter) +
" because variable value was known to never satisfy property.");