MCPcopy Create free account
hub / github.com/AliveToolkit/alive2 / block

Method block

smt/solver.cpp:430–450  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

428}
429
430void Solver::block(const Model &m, Solver *sneg) {
431 set<expr> assignments;
432 for (const auto &[var, val] : m) {
433 assignments.insert(var == val);
434 }
435
436 if (sneg) {
437 // simple left-to-right variable discard algorithm
438 for (auto I = assignments.begin(); I != assignments.end(); ) {
439 SolverPush push(*sneg);
440 expr val = *I;
441 I = assignments.erase(I);
442
443 sneg->add(expr::mk_and(assignments));
444 if (!sneg->check("block model").isUnsat())
445 assignments.insert(std::move(val));
446 }
447 }
448
449 add(!expr::mk_and(assignments));
450}
451
452void Solver::reset() {
453 Z3_solver_reset(ctx(), s);

Callers 1

operator++Method · 0.80

Calls 5

isUnsatMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
addMethod · 0.45
checkMethod · 0.45

Tested by

no test coverage detected