Skip to content

Commit 1c163db

Browse files
remove output
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
1 parent 0f89650 commit 1c163db

File tree

6 files changed

+45
-22
lines changed

6 files changed

+45
-22
lines changed

src/sat/smt/arith_internalize.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ namespace arith {
5151
}
5252
}
5353

54+
void solver::initialize_value(expr* var, expr* value) {
55+
rational r;
56+
if (!a.is_numeral(value, r)) {
57+
IF_VERBOSE(5, verbose_stream() << "numeric constant expected in initialization " << mk_pp(var, m) << " := " << mk_pp(value, m) << "\n");
58+
return;
59+
}
60+
lp().move_lpvar_to_value(get_lpvar(mk_evar(var)), r);
61+
}
62+
63+
5464
lpvar solver::get_one(bool is_int) {
5565
return add_const(1, is_int ? m_one_var : m_rone_var, is_int);
5666
}

src/sat/smt/arith_solver.h

+3
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,8 @@ namespace arith {
485485

486486
bool validate_conflict();
487487

488+
489+
488490
public:
489491
solver(euf::solver& ctx, theory_id id);
490492
~solver() override;
@@ -512,6 +514,7 @@ namespace arith {
512514
void internalize(expr* e) override;
513515
void eq_internalized(euf::enode* n) override;
514516
void apply_sort_cnstr(euf::enode* n, sort* s) override {}
517+
void initialize_value(expr* var, expr* value) override;
515518
bool is_shared(theory_var v) const override;
516519
lbool get_phase(bool_var v) override;
517520
bool include_func_interp(func_decl* f) const override;

src/sat/smt/euf_solver.cpp

+28-21
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,30 @@ namespace euf {
195195
m_reason_unknown.clear();
196196
for (auto* s : m_solvers)
197197
s->init_search();
198+
199+
for (auto const& [var, value] : m_initial_values) {
200+
if (m.is_bool(var)) {
201+
auto lit = expr2literal(var);
202+
if (lit == sat::null_literal) {
203+
IF_VERBOSE(5, verbose_stream() << "no literal associated with " << mk_pp(var, m) << " := " << mk_pp(value, m) << "\n");
204+
continue;
205+
}
206+
if (m.is_true(value))
207+
s().set_phase(lit);
208+
else if (m.is_false(value))
209+
s().set_phase(~lit);
210+
else
211+
IF_VERBOSE(5, verbose_stream() << "malformed value " << mk_pp(var, m) << " := " << mk_pp(value, m) << "\n");
212+
continue;
213+
}
214+
auto* th = m_id2solver.get(var->get_sort()->get_family_id(), nullptr);
215+
if (!th) {
216+
IF_VERBOSE(5, verbose_stream() << "no default initialization associated with " << mk_pp(var, m) << " := " << mk_pp(value, m) << "\n");
217+
continue;
218+
}
219+
th->initialize_value(var, value);
220+
}
221+
198222
}
199223

200224
bool solver::is_external(bool_var v) {
@@ -1257,27 +1281,10 @@ namespace euf {
12571281
}
12581282

12591283
void solver::user_propagate_initialize_value(expr* var, expr* value) {
1260-
if (m.is_bool(var)) {
1261-
auto lit = expr2literal(var);
1262-
if (lit == sat::null_literal) {
1263-
IF_VERBOSE(5, verbose_stream() << "no literal associated with " << mk_pp(var, m) << " := " << mk_pp(value, m) << "\n");
1264-
return;
1265-
}
1266-
if (m.is_true(value))
1267-
s().set_phase(lit);
1268-
else if (m.is_false(value))
1269-
s().set_phase(~lit);
1270-
else
1271-
IF_VERBOSE(5, verbose_stream() << "malformed value " << mk_pp(var, m) << " := " << mk_pp(value, m) << "\n");
1272-
return;
1273-
}
1274-
auto* th = m_id2solver.get(var->get_sort()->get_family_id(), nullptr);
1275-
if (!th) {
1276-
IF_VERBOSE(5, verbose_stream() << "no default initialization associated with " << mk_pp(var, m) << " := " << mk_pp(value, m) << "\n");
1277-
return;
1278-
}
1279-
// th->initialize_value(var, value);
1280-
IF_VERBOSE(5, verbose_stream() << "no default initialization associated with " << mk_pp(var, m) << " := " << mk_pp(value, m) << "\n");
1284+
1285+
m_initial_values.push_back({expr_ref(var, m), expr_ref(value, m)});
1286+
push(push_back_vector(m_initial_values));
1287+
12811288
}
12821289

12831290

src/sat/smt/euf_solver.h

+2
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ namespace euf {
189189
euf::enode* mk_true();
190190
euf::enode* mk_false();
191191

192+
vector<std::pair<expr_ref, expr_ref>> m_initial_values;
193+
192194
// replay
193195
typedef std::tuple<expr_ref, unsigned, sat::bool_var> reinit_t;
194196
vector<reinit_t> m_reinit;

src/sat/smt/sat_th.h

+2
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ namespace euf {
152152

153153
virtual void finalize() {}
154154

155+
virtual void initialize_value(expr* v, expr* value) { IF_VERBOSE(5, verbose_stream() << "value initialzation is not supported for theory\n"); }
156+
155157
};
156158

157159
class th_proof_hint : public sat::proof_hint {

src/smt/theory_lra.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -1422,7 +1422,6 @@ class theory_lra::imp {
14221422
m_num_conflicts = 0;
14231423
for (auto const& [v, r] : m_values)
14241424
lp().move_lpvar_to_value(v, r);
1425-
display(verbose_stream() << "init search\n");
14261425
}
14271426

14281427
bool can_get_value(theory_var v) const {

0 commit comments

Comments
 (0)