@@ -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
0 commit comments