Skip to content

Commit 44231d3

Browse files
committed
Disabled reordering of clause in simp_general_excluded_middle if no simplification happened.
1 parent 20d286d commit 44231d3

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

src/normal_forms.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,6 +1310,7 @@ tau<BAs...> group_dnf_expression (const tau<BAs...>& fm) {
13101310
template<typename... BAs>
13111311
tau<BAs...> simp_general_excluded_middle (const tau<BAs...>& fm) {
13121312
assert(is_non_terminal(tau_parser::bf, fm));
1313+
bool was_simplified = false;
13131314
auto grouped = group_dnf_expression(fm);
13141315
auto clauses = get_dnf_bf_clauses(grouped);
13151316
for (int_t i = 0; i < (int_t)clauses.size(); ++i) {
@@ -1325,6 +1326,7 @@ tau<BAs...> simp_general_excluded_middle (const tau<BAs...>& fm) {
13251326
if (cnf[k] == cn) {
13261327
cnf.erase(cnf.begin() + k);
13271328
has_simp = true;
1329+
was_simplified = true;
13281330
if (cnf.empty()) {
13291331
erase_clause = true;
13301332
}
@@ -1343,7 +1345,7 @@ tau<BAs...> simp_general_excluded_middle (const tau<BAs...>& fm) {
13431345
--i;
13441346
}
13451347
}
1346-
return to_dnf2(build_bf_or<BAs...>(clauses), false);
1348+
return was_simplified ? to_dnf2(build_bf_or<BAs...>(clauses), false) : fm;
13471349
}
13481350

13491351
// Assume that fm is in DNF (or CNF -> set is_cnf to true)
@@ -1655,10 +1657,14 @@ std::pair<std::vector<int_t>, bool> simplify_path(
16551657
clause = replace(clause, changes);
16561658
continue;
16571659
}
1660+
if (sorted_v != v) {
1661+
std::map<tau<BAs...>, tau<BAs...>> changes = {{v, sorted_v}};
1662+
clause = replace(clause, changes);
1663+
}
16581664
// There is a new variable
1659-
assert(v != build_wff_eq(_T<BAs...>) && v != build_wff_eq(_F<BAs...>));
1660-
vars.push_back(v);
1661-
var_to_idx.emplace(v, vars.size() - 1);
1665+
assert(sorted_v != build_wff_eq(_T<BAs...>) && sorted_v != build_wff_eq(_F<BAs...>));
1666+
vars.push_back(sorted_v);
1667+
var_to_idx.emplace(sorted_v, vars.size() - 1);
16621668
}
16631669
}
16641670
return clause_to_vector(clause, var_to_idx, true, false);
@@ -2083,7 +2089,7 @@ tau<BAs...> to_dnf2(const tau<BAs...>& fm, bool is_wff) {
20832089
to_dnf2(trim(new_fm)->child[1], is_wff));
20842090
// Perform simplification
20852091
if (conj != new_fm)
2086-
new_fm = reduce2(conj, p::bf);
2092+
new_fm = reduce2(conj, p::bf);
20872093
} else if (is_child_non_terminal(p::bf_or, new_fm)) {
20882094
new_fm = build_bf_or(
20892095
to_dnf2(trim(new_fm)->child[0], is_wff),

0 commit comments

Comments
 (0)