39 solver->preprocessing =
true;
41 const unsigned max_rounds =
GET_OPTION (preprocessrounds);
43 const unsigned variables_initially =
solver->active;
46 const uint64_t clauses_originally =
solver->statistics.clauses_original;
48 "[preprocess] running at most %u preprocesing rounds",
52 "[preprocess] initially %u variables %.0f%% and %" PRIu64
55 kissat_percent (variables_initially, variables_originally),
57 kissat_percent (clauses_initially, clauses_originally));
66 const unsigned variables_before =
solver->active;
70 "[preprocess-%u] started preprocessing round %u", round,
77 const unsigned variables_after =
solver->active;
80 if (variables_after < variables_before) {
81 unsigned removed = variables_before - variables_after;
83 solver,
"[preprocess-%u] removed %u variables %.0f%% in round %u",
84 round, removed, kissat_percent (removed, variables_before),
86 }
else if (variables_after > variables_before) {
87 unsigned added = variables_after - variables_before;
89 solver,
"[preprocess-%u] added %u variables %.0f%% in round %u",
90 round, added, kissat_percent (added, variables_before), round);
94 "[preprocess-%u] number variables %u unchanged in round %u",
95 round, variables_before, round);
96 if (clauses_after < clauses_before) {
97 uint64_t removed = clauses_before - clauses_after;
99 "[preprocess-%u] removed %" PRIu64
100 " irredundant and binary clauses %.0f%% in round %u",
102 kissat_percent (removed, clauses_before), round);
103 }
else if (clauses_after > clauses_before) {
104 uint64_t added = clauses_after - clauses_before;
106 "[preprocess-%u] added %" PRIu64
107 " irredundant and binary clauses %.0f%% in round %u",
108 round, added, kissat_percent (added, clauses_before),
113 "[preprocess-%u] number irredundant and binary clauses %" PRIu64
114 " unchanged in round %u",
115 round, clauses_before, round);
117 if (round == max_rounds)
119 if (variables_before == variables_after &&
120 clauses_before == clauses_after)
125 const unsigned variables_finally =
solver->active;
128 if (variables_finally < variables_initially) {
129 unsigned removed = variables_initially - variables_finally;
132 "[preprocess] removed %u variables %.0f%% (%u remain %.0f%%)",
133 removed, kissat_percent (removed, variables_initially),
135 kissat_percent (variables_finally, variables_originally));
136 }
else if (variables_finally > variables_initially) {
137 unsigned added = variables_finally - variables_initially;
139 solver,
"[preprocess] added %u variables %.0f%% (%u remain %.0f%%)",
140 added, kissat_percent (added, variables_initially),
142 kissat_percent (variables_finally, variables_originally));
146 "[preprocess] number variables %u unchanged (%u remain %.0f%%)",
147 variables_initially, variables_finally,
148 kissat_percent (variables_finally, variables_originally));
149 if (clauses_finally < clauses_initially) {
150 uint64_t removed = clauses_initially - clauses_finally;
152 "[preprocess] removed %" PRIu64
153 " irredundant and binary clauses %.0f%% (%" PRIu64
155 removed, kissat_percent (removed, clauses_initially),
157 kissat_percent (clauses_finally, clauses_originally));
158 }
else if (clauses_finally > clauses_initially) {
159 uint64_t added = clauses_finally - clauses_initially;
161 "[preprocess] added %" PRIu64
162 " irredundant and binary clauses %.0f%% (%" PRIu64
164 added, kissat_percent (added, clauses_initially),
166 kissat_percent (clauses_finally, clauses_originally));
170 "[preprocess] number irredundant and binary clauses %" PRIu64
171 " unchanged (%" PRIu64
" remain %.0f%%)",
172 clauses_initially, clauses_finally,
173 kissat_percent (clauses_finally, clauses_originally));
177 solver->preprocessing =
false;
179 return solver->inconsistent ? 20 : 0;