Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
41b5c64
very basic setup
ilanashapiro Jul 23, 2025
563906d
Merge branch 'Z3Prover:master' into parallel-solving
ilanashapiro Jul 24, 2025
4b87458
Merge remote-tracking branch 'upstream/ilana' into parallel-solving
ilanashapiro Jul 24, 2025
a6c51df
ensure solve_eqs is fully disabled when smt.solve_eqs=false, #7743
NikolajBjorner Jul 24, 2025
01633f7
respect smt configuration parameter in elim_unconstrained simplifier
NikolajBjorner Jul 24, 2025
1a488bb
indentation
NikolajBjorner Jul 25, 2025
6550495
add bash files for test runs
ilanashapiro Jul 25, 2025
e549286
add option to selectively disable variable solving for only ground ex…
NikolajBjorner Jul 26, 2025
95be0cf
remove verbose output
NikolajBjorner Jul 26, 2025
0528c86
fix #7745
NikolajBjorner Jul 26, 2025
8e1a528
ensure atomic constraints are processed by arithmetic solver
NikolajBjorner Jul 26, 2025
1f8b081
#7739 optimization
NikolajBjorner Jul 26, 2025
ad2934f
fix unsound len(substr) axiom
NikolajBjorner Jul 26, 2025
eb24488
FreshConst is_sort (#7748)
humnrdble Jul 27, 2025
e3139d4
#7750
NikolajBjorner Jul 27, 2025
0761394
Add parameter validation for selected API functions
NikolajBjorner Jul 27, 2025
67695b4
updates to ac-plugin
NikolajBjorner Jul 27, 2025
f77123c
enable passive, add check for bloom up-to-date
NikolajBjorner Jul 28, 2025
36fbee3
add top-k fixed-sized min-heap priority queue for top scoring literals
ilanashapiro Jul 28, 2025
f607a70
Merge branch 'Z3Prover:master' into parallel-solving
ilanashapiro Jul 28, 2025
4eeb98d
Merge branch 'ilana' into parallel-solving
NikolajBjorner Jul 29, 2025
2c188a5
set up worker thread batch manager for multithreaded batch cubes para…
ilanashapiro Jul 29, 2025
375d537
Merge branch 'parallel-solving' of github.com:ilanashapiro/z3 into pa…
ilanashapiro Jul 29, 2025
8a6cbec
fix bug in parallel solving batch setup
ilanashapiro Jul 30, 2025
e6213f8
fix bug
ilanashapiro Jul 31, 2025
2d876d5
allow for internalize implies
NikolajBjorner Aug 1, 2025
89cc9bd
disable pre-processing during cubing
NikolajBjorner Aug 1, 2025
12df9f8
Merge branch 'Z3Prover:master' into parallel-solving
ilanashapiro Aug 1, 2025
2a26776
debugging
ilanashapiro Aug 1, 2025
33c184f
Merge branch 'parallel-solving' of github.com:ilanashapiro/z3 into pa…
ilanashapiro Aug 1, 2025
aac8787
process cubes as lists of individual lits
ilanashapiro Aug 4, 2025
a0a0670
Merge branch 'ilana' into parallel-solving
NikolajBjorner Aug 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions src/smt/smt_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ Revision History:
#include "solver/progress_callback.h"
#include "solver/assertions/asserted_formulas.h"
#include "smt/priority_queue.h"
#include "util/dlist.h"
#include <tuple>

// there is a significant space overhead with allocating 1000+ contexts in
Expand Down Expand Up @@ -191,6 +192,13 @@ namespace smt {
svector<bool_var_data> m_bdata; //!< mapping bool_var -> data
svector<double> m_activity;
updatable_priority_queue::priority_queue<bool_var, double> m_pq_scores;

struct lit_node : dll_base<lit_node> {
literal lit;
lit_node(literal l) : lit(l) { init(this); }
};
lit_node* m_dll_lits;

svector<std::array<double, 2>> m_lit_scores;

clause_vector m_aux_clauses;
Expand Down Expand Up @@ -908,6 +916,8 @@ namespace smt {

void add_or_rel_watches(app * n);

void add_implies_rel_watches(app* n);

void add_ite_rel_watches(app * n);

void mk_not_cnstr(app * n);
Expand All @@ -916,6 +926,8 @@ namespace smt {

void mk_or_cnstr(app * n);

void mk_implies_cnstr(app* n);

void mk_iff_cnstr(app * n, bool sign);

void mk_ite_cnstr(app * n);
Expand Down
32 changes: 29 additions & 3 deletions src/smt/smt_internalizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,10 @@ namespace smt {
mk_or_cnstr(to_app(n));
add_or_rel_watches(to_app(n));
break;
case OP_IMPLIES:
mk_implies_cnstr(to_app(n));
add_implies_rel_watches(to_app(n));
break;
case OP_EQ:
if (m.is_iff(n))
mk_iff_cnstr(to_app(n), false);
Expand All @@ -711,8 +715,7 @@ namespace smt {
mk_iff_cnstr(to_app(n), true);
break;
case OP_DISTINCT:
case OP_IMPLIES:
throw default_exception("formula has not been simplified");
throw default_exception(std::string("formula has not been simplified") + " : " + mk_pp(n, m));
case OP_OEQ:
UNREACHABLE();
default:
Expand Down Expand Up @@ -1712,6 +1715,14 @@ namespace smt {
}
}

void context::add_implies_rel_watches(app* n) {
if (relevancy()) {
relevancy_eh* eh = m_relevancy_propagator->mk_implies_relevancy_eh(n);
add_rel_watch(~get_literal(n->get_arg(0)), eh);
add_rel_watch(get_literal(n->get_arg(1)), eh);
}
}

void context::add_ite_rel_watches(app * n) {
if (relevancy()) {
relevancy_eh * eh = m_relevancy_propagator->mk_ite_relevancy_eh(n);
Expand Down Expand Up @@ -1758,9 +1769,24 @@ namespace smt {
mk_gate_clause(buffer.size(), buffer.data());
}

void context::mk_implies_cnstr(app* n) {
literal l = get_literal(n);
literal_buffer buffer;
buffer.push_back(~l);
auto arg1 = n->get_arg(0);
literal l_arg1 = get_literal(arg1);
mk_gate_clause(l, l_arg1);
buffer.push_back(~l_arg1);
auto arg2 = n->get_arg(1);
literal l_arg2 = get_literal(arg2);
mk_gate_clause(l, ~l_arg2);
buffer.push_back(l_arg2);
mk_gate_clause(buffer.size(), buffer.data());
}

void context::mk_iff_cnstr(app * n, bool sign) {
if (n->get_num_args() != 2)
throw default_exception("formula has not been simplified");
throw default_exception(std::string("formula has not been simplified") + " : " + mk_pp(n, m));
literal l = get_literal(n);
literal l1 = get_literal(n->get_arg(0));
literal l2 = get_literal(n->get_arg(1));
Expand Down
11 changes: 8 additions & 3 deletions src/smt/smt_lookahead.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,14 @@ namespace smt {
svector<bool_var> vars;
for (bool_var v = 0; v < static_cast<bool_var>(sz); ++v) {
expr* b = ctx.bool_var2expr(v);
if (b && ctx.get_assignment(v) == l_undef) {
vars.push_back(v);
}
if (!b)
continue;
if (ctx.get_assignment(v) != l_undef)
continue;
if (m.is_and(b) || m.is_or(b) || m.is_not(b) || m.is_ite(b) || m.is_implies(b) || m.is_iff(b) || m.is_xor(b))
continue; // do not choose connectives
vars.push_back(v);

}
compare comp(ctx);
std::sort(vars.begin(), vars.end(), comp);
Expand Down
Loading