@@ -33,7 +33,14 @@ operator()(propertiest &properties)
3333 // There might be more solutions from the previous equation.
3434 if (property_decider)
3535 {
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+
3744 if (result.progress == resultt::progresst::FOUND_FAIL)
3845 return result;
3946 }
@@ -91,8 +98,22 @@ operator()(propertiest &properties)
9198
9299 if (symex.get_remaining_vccs () > 0 )
93100 {
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 );
96117
97118 if (result.progress == resultt::progresst::FOUND_FAIL)
98119 return result;
@@ -175,58 +196,3 @@ void single_path_symex_checkert::output_proof()
175196 const path_storaget::patht &resume = worklist->peek ();
176197 output_graphml (resume.equation , ns, options);
177198}
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