32 uint64_t partOfPropCount = 0;
34 std::map<uint64_t, bool> partOfProp;
36 for (uint64_t i = 0; i < automaton.getNumberOfLocations(); i++) {
42 STORM_LOG_TRACE(
"\t\t" + std::to_string(partOfPropCount) +
" old locations potentially satisfy property");
48 if (automatonInfo.hasSink) {
55 if (automatonInfo.hasSink) {
56 automatonInfo.sinkIndex = result.newIndices.excludedLocationsToNewIndices[automatonInfo.sinkIndex];
69 std::set<uint64_t> knownUnsatValues;
72 if (partOfPropCount >= 3) {
73 std::map<expressions::Variable, expressions::Expression> substitutionMap;
75 for (uint64_t i = 0; i < result.newIndices.variableDomain.size(); i++) {
76 substitutionMap[variable] = result.newIndices.variableDomain[i];
78 if (!satisfiesProperty) {
79 knownUnsatValues.emplace(i);
82 STORM_LOG_TRACE(
"\t\t" + std::to_string(knownUnsatValues.size()) +
" variable values never satisfy property");
87 bool avoidChecks =
false;
88 if (partOfPropCount > 5 && automaton.getNumberOfLocations() > partOfPropCount * 5) {
93 uint64_t knownUnsatCounter = 0;
94 uint64_t satisfactionCheckCounter = 0;
95 uint64_t knownSatCounter = 0;
96 uint64_t oldLocationUnsatCounter = 0;
98 for (std::pair<uint64_t, std::map<int64_t, uint64_t>> oldLocMapping : result.newIndices.locationVariableValueMap) {
99 bool oldSatisfied = partOfProp[oldLocMapping.first];
100 for (std::pair<uint64_t, uint64_t> valueIndexPair : oldLocMapping.second) {
103 if (variablePartOfProperty) {
104 if (knownUnsatValues.count(valueIndexPair.first) > 0) {
105 isPartOfProp =
false;
113 satisfactionCheckCounter++;
124 oldLocationUnsatCounter++;
129 uint64_t totalCount = knownUnsatCounter + satisfactionCheckCounter + knownSatCounter + oldLocationUnsatCounter;
130 STORM_LOG_TRACE(
"\t\tPerformed " + std::to_string(satisfactionCheckCounter) +
" property satisfaction checks (location count: " +
131 std::to_string(totalCount) +
"), avoided\n\t\t\t" + std::to_string(oldLocationUnsatCounter) +
" because old location was unsat,\n\t\t\t" +
132 std::to_string(knownSatCounter) +
" because variable was not part of property and old location was sat and\n\t\t\t" +
133 std::to_string(knownUnsatCounter) +
" because variable value was known to never satisfy property.");