@@ -178,89 +178,80 @@ propt::resultt satcheck_minisat2_baset<T>::do_prop_solve()
178
178
{
179
179
log.status () << " SAT checker inconsistent: instance is UNSATISFIABLE"
180
180
<< messaget::eom;
181
+ status = statust::UNSAT;
182
+ return resultt::P_UNSATISFIABLE;
181
183
}
182
- else
183
- {
184
- // if assumptions contains false, we need this to be UNSAT
185
- bool has_false=false ;
186
-
187
- forall_literals (it, assumptions)
188
- if (it->is_false ())
189
- has_false=true ;
190
184
191
- if (has_false)
185
+ // if assumptions contains false, we need this to be UNSAT
186
+ for (const auto &assumption : assumptions)
187
+ {
188
+ if (assumption.is_false ())
192
189
{
193
190
log.status () << " got FALSE as assumption: instance is UNSATISFIABLE"
194
191
<< messaget::eom;
192
+ status = statust::UNSAT;
193
+ return resultt::P_UNSATISFIABLE;
195
194
}
196
- else
197
- {
198
- Minisat::vec<Minisat::Lit> solver_assumptions;
199
- convert (assumptions, solver_assumptions);
195
+ }
200
196
201
- using Minisat::lbool;
197
+ Minisat::vec<Minisat::Lit> solver_assumptions;
198
+ convert (assumptions, solver_assumptions);
199
+
200
+ using Minisat::lbool;
202
201
203
202
#ifndef _WIN32
204
203
205
- void (*old_handler)(int )= SIG_ERR;
204
+ void (*old_handler)(int ) = SIG_ERR;
206
205
207
- if (time_limit_seconds!= 0 )
208
- {
209
- solver_to_interrupt= solver;
210
- old_handler= signal (SIGALRM, interrupt_solver);
211
- if (old_handler== SIG_ERR)
212
- log.warning () << " Failed to set solver time limit" << messaget::eom;
213
- else
214
- alarm (time_limit_seconds);
215
- }
206
+ if (time_limit_seconds != 0 )
207
+ {
208
+ solver_to_interrupt = solver;
209
+ old_handler = signal (SIGALRM, interrupt_solver);
210
+ if (old_handler == SIG_ERR)
211
+ log.warning () << " Failed to set solver time limit" << messaget::eom;
212
+ else
213
+ alarm (time_limit_seconds);
214
+ }
216
215
217
- lbool solver_result= solver->solveLimited (solver_assumptions);
216
+ lbool solver_result = solver->solveLimited (solver_assumptions);
218
217
219
- if (old_handler!= SIG_ERR)
220
- {
221
- alarm (0 );
222
- signal (SIGALRM, old_handler);
223
- solver_to_interrupt= solver;
224
- }
218
+ if (old_handler != SIG_ERR)
219
+ {
220
+ alarm (0 );
221
+ signal (SIGALRM, old_handler);
222
+ solver_to_interrupt = solver;
223
+ }
225
224
226
225
#else // _WIN32
227
226
228
- if (time_limit_seconds!= 0 )
229
- {
230
- log.warning () << " Time limit ignored (not supported on Win32 yet)"
231
- << messaget::eom;
232
- }
227
+ if (time_limit_seconds != 0 )
228
+ {
229
+ log.warning () << " Time limit ignored (not supported on Win32 yet)"
230
+ << messaget::eom;
231
+ }
233
232
234
- lbool solver_result=
235
- solver->solve (solver_assumptions) ? l_True : l_False;
233
+ lbool solver_result = solver->solve (solver_assumptions) ? l_True : l_False;
236
234
237
235
#endif
238
236
239
- if (solver_result==l_True)
240
- {
241
- log.status () << " SAT checker: instance is SATISFIABLE"
242
- << messaget::eom;
243
- CHECK_RETURN (solver->model .size ()>0 );
244
- status=statust::SAT;
245
- return resultt::P_SATISFIABLE;
246
- }
247
- else if (solver_result==l_False)
248
- {
249
- log.status () << " SAT checker: instance is UNSATISFIABLE"
250
- << messaget::eom;
251
- }
252
- else
253
- {
254
- log.status () << " SAT checker: timed out or other error"
255
- << messaget::eom;
256
- status=statust::ERROR;
257
- return resultt::P_ERROR;
258
- }
259
- }
237
+ if (solver_result == l_True)
238
+ {
239
+ log.status () << " SAT checker: instance is SATISFIABLE" << messaget::eom;
240
+ CHECK_RETURN (solver->model .size () > 0 );
241
+ status = statust::SAT;
242
+ return resultt::P_SATISFIABLE;
243
+ }
244
+
245
+ if (solver_result == l_False)
246
+ {
247
+ log.status () << " SAT checker: instance is UNSATISFIABLE" << messaget::eom;
248
+ status = statust::UNSAT;
249
+ return resultt::P_UNSATISFIABLE;
260
250
}
261
251
262
- status=statust::UNSAT;
263
- return resultt::P_UNSATISFIABLE;
252
+ log.status () << " SAT checker: timed out or other error" << messaget::eom;
253
+ status = statust::ERROR;
254
+ return resultt::P_ERROR;
264
255
}
265
256
catch (const Minisat::OutOfMemoryException &)
266
257
{
@@ -328,14 +319,16 @@ bool satcheck_minisat2_baset<T>::is_in_conflict(literalt a) const
328
319
template <typename T>
329
320
void satcheck_minisat2_baset<T>::set_assumptions(const bvt &bv)
330
321
{
331
- assumptions=bv;
332
-
333
- forall_literals (it, assumptions)
334
- if (it->is_true ())
322
+ // We filter out 'true' assumptions which cause an assertion violation
323
+ // in Minisat2.
324
+ assumptions.clear ();
325
+ for (const auto &assumption : bv)
326
+ {
327
+ if (!assumption.is_true ())
335
328
{
336
- assumptions.clear ();
337
- break ;
329
+ assumptions.push_back (assumption);
338
330
}
331
+ }
339
332
}
340
333
341
334
satcheck_minisat_no_simplifiert::satcheck_minisat_no_simplifiert (
0 commit comments