@@ -33,7 +33,14 @@ operator()(propertiest &properties)
33
33
// There might be more solutions from the previous equation.
34
34
if (property_decider)
35
35
{
36
- decide (result, properties);
36
+ run_property_decider (
37
+ result,
38
+ properties,
39
+ *property_decider,
40
+ ui_message_handler,
41
+ std::chrono::duration<double >(0 ),
42
+ false );
43
+
37
44
if (result.progress == resultt::progresst::FOUND_FAIL)
38
45
return result;
39
46
}
@@ -91,8 +98,22 @@ operator()(propertiest &properties)
91
98
92
99
if (symex.get_remaining_vccs () > 0 )
93
100
{
94
- prepare (result, properties, resume.equation );
95
- decide (result, properties);
101
+ update_properties_status_from_symex_target_equation (
102
+ properties, result.updated_properties , resume.equation );
103
+
104
+ property_decider = util_make_unique<goto_symex_property_decidert>(
105
+ options, ui_message_handler, resume.equation , ns);
106
+
107
+ const auto solver_runtime = prepare_property_decider (
108
+ properties, resume.equation , *property_decider, ui_message_handler);
109
+
110
+ run_property_decider (
111
+ result,
112
+ properties,
113
+ *property_decider,
114
+ ui_message_handler,
115
+ solver_runtime,
116
+ false );
96
117
97
118
if (result.progress == resultt::progresst::FOUND_FAIL)
98
119
return result;
@@ -175,58 +196,3 @@ void single_path_symex_checkert::output_proof()
175
196
const path_storaget::patht &resume = worklist->peek ();
176
197
output_graphml (resume.equation , ns, options);
177
198
}
178
-
179
- void single_path_symex_checkert::prepare (
180
- resultt &result,
181
- propertiest &properties,
182
- symex_target_equationt &equation)
183
- {
184
- update_properties_status_from_symex_target_equation (
185
- properties, result.updated_properties , equation);
186
-
187
- property_decider = util_make_unique<goto_symex_property_decidert>(
188
- options, ui_message_handler, equation, ns);
189
-
190
- log.status () << " Passing problem to "
191
- << property_decider->get_solver ().decision_procedure_text ()
192
- << messaget::eom;
193
-
194
- convert_symex_target_equation (
195
- equation, property_decider->get_solver (), ui_message_handler);
196
- property_decider->update_properties_goals_from_symex_target_equation (
197
- properties);
198
- property_decider->convert_goals ();
199
- property_decider->freeze_goal_variables ();
200
- }
201
-
202
- void single_path_symex_checkert::decide (
203
- resultt &result,
204
- propertiest &properties)
205
- {
206
- auto solver_start = std::chrono::steady_clock::now ();
207
-
208
- log.status () << " Running "
209
- << property_decider->get_solver ().decision_procedure_text ()
210
- << messaget::eom;
211
-
212
- property_decider->add_constraint_from_goals (
213
- [&properties](const irep_idt &property_id) {
214
- return is_property_to_check (properties.at (property_id).status );
215
- });
216
-
217
- decision_proceduret::resultt dec_result = property_decider->solve ();
218
-
219
- property_decider->update_properties_status_from_goals (
220
- properties, result.updated_properties , dec_result, false );
221
-
222
- auto solver_stop = std::chrono::steady_clock::now ();
223
- log.status ()
224
- << " Runtime decision procedure: "
225
- << std::chrono::duration<double >(solver_stop - solver_start).count () << " s"
226
- << messaget::eom;
227
-
228
- if (dec_result == decision_proceduret::resultt::D_SATISFIABLE)
229
- {
230
- result.progress = resultt::progresst::FOUND_FAIL;
231
- }
232
- }
0 commit comments