Skip to content

Commit b68cedf

Browse files
authored
Merge pull request #263 from diffblue/trans_expr_not_optional
ebmc: transition_systemt does not need optional transt
2 parents 639523b + e4fa47b commit b68cedf

File tree

8 files changed

+27
-31
lines changed

8 files changed

+27
-31
lines changed

src/ebmc/ebmc_base.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,9 +341,8 @@ int ebmc_baset::do_word_level_bmc(
341341

342342
// convert the transition system
343343
const namespacet ns(transition_system.symbol_table);
344-
CHECK_RETURN(transition_system.trans_expr.has_value());
345344
::unwind(
346-
*transition_system.trans_expr,
345+
transition_system.trans_expr,
347346
message.get_message_handler(),
348347
solver,
349348
bound + 1,

src/ebmc/k_induction.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,14 @@ Function: k_inductiont::induction_base
122122

123123
int k_inductiont::induction_base()
124124
{
125-
PRECONDITION(transition_system.trans_expr.has_value());
126125
message.status() << "Induction Base" << messaget::eom;
127126

128127
auto solver_wrapper = solver_factory(ns, message.get_message_handler());
129128
auto &solver = solver_wrapper.stack_decision_procedure();
130129

131130
// convert the transition system
132131
::unwind(
133-
*transition_system.trans_expr,
132+
transition_system.trans_expr,
134133
message.get_message_handler(),
135134
solver,
136135
bound + 1,
@@ -162,7 +161,6 @@ Function: k_inductiont::induction_step
162161

163162
int k_inductiont::induction_step()
164163
{
165-
PRECONDITION(transition_system.trans_expr.has_value());
166164
message.status() << "Induction Step" << messaget::eom;
167165

168166
unsigned no_timeframes=bound+1;
@@ -184,7 +182,7 @@ int k_inductiont::induction_step()
184182

185183
// *no* initial state
186184
unwind(
187-
*transition_system.trans_expr,
185+
transition_system.trans_expr,
188186
message.get_message_handler(),
189187
solver,
190188
no_timeframes,

src/ebmc/liveness_to_safety.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -229,16 +229,16 @@ void liveness_to_safetyt::operator()()
229229
auto looped_invar = equal_exprt{
230230
this->looped_symbol(), and_exprt(saved_symbol(), state_is_loop())};
231231

232-
transition_system.trans_expr->init() =
233-
conjunction({transition_system.trans_expr->init(), std::move(saved_init)});
232+
transition_system.trans_expr.init() =
233+
conjunction({transition_system.trans_expr.init(), std::move(saved_init)});
234234

235-
transition_system.trans_expr->invar() = conjunction(
236-
{transition_system.trans_expr->invar(),
235+
transition_system.trans_expr.invar() = conjunction(
236+
{transition_system.trans_expr.invar(),
237237
std::move(save_invar),
238238
std::move(looped_invar)});
239239

240-
transition_system.trans_expr->trans() = conjunction(
241-
{transition_system.trans_expr->trans(),
240+
transition_system.trans_expr.trans() = conjunction(
241+
{transition_system.trans_expr.trans(),
242242
std::move(saved_trans),
243243
std::move(loop_trans)});
244244

@@ -284,8 +284,8 @@ void liveness_to_safetyt::translate_GFp(propertyt &property)
284284
// Initial-state constraint for 'live' variable.
285285
auto live_init = equal_exprt{live_symbol(property.name), false_exprt()};
286286

287-
transition_system.trans_expr->init() =
288-
conjunction({transition_system.trans_expr->init(), std::move(live_init)});
287+
transition_system.trans_expr.init() =
288+
conjunction({transition_system.trans_expr.init(), std::move(live_init)});
289289

290290
// Next-state constraint for 'live' variable.
291291
// The paper uses live' := live ∨ found, which is for F found,
@@ -295,8 +295,8 @@ void liveness_to_safetyt::translate_GFp(propertyt &property)
295295
or_exprt{
296296
and_exprt{live_symbol(property.name), not_exprt{save_symbol()}}, p}};
297297

298-
transition_system.trans_expr->trans() =
299-
conjunction({transition_system.trans_expr->trans(), std::move(live_trans)});
298+
transition_system.trans_expr.trans() =
299+
conjunction({transition_system.trans_expr.trans(), std::move(live_trans)});
300300

301301
// replace the liveness property
302302
property.expr = safety_replacement(property.name, property.expr);

src/ebmc/random_traces.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -449,15 +449,13 @@ void random_tracest::operator()(
449449

450450
auto number_of_timeframes = number_of_trace_steps + 1;
451451

452-
PRECONDITION(transition_system.trans_expr.has_value());
453-
454452
message.status() << "Passing transition system to solver" << messaget::eom;
455453

456454
satcheckt satcheck{message.get_message_handler()};
457455
boolbvt solver(ns, satcheck, message.get_message_handler());
458456

459457
::unwind(
460-
*transition_system.trans_expr,
458+
transition_system.trans_expr,
461459
message.get_message_handler(),
462460
solver,
463461
number_of_timeframes,

src/ebmc/ranking_function.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,6 @@ int do_ranking_function(
9292
transition_systemt transition_system =
9393
get_transition_system(cmdline, message_handler);
9494

95-
CHECK_RETURN(transition_system.trans_expr.has_value());
96-
9795
// parse the ranking function
9896
if(!cmdline.isset("ranking-function"))
9997
throw ebmc_errort() << "no candidate ranking function given";
@@ -143,7 +141,7 @@ tvt is_ranking_function(
143141
auto &solver = solver_wrapper.stack_decision_procedure();
144142

145143
// *no* initial state, two time frames
146-
unwind(*transition_system.trans_expr, message_handler, solver, 2, ns, false);
144+
unwind(transition_system.trans_expr, message_handler, solver, 2, ns, false);
147145

148146
const auto p = [&property]() -> exprt
149147
{

src/ebmc/show_trans.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,6 @@ int show_transt::show_trans()
241241
transition_system =
242242
get_transition_system(cmdline, message.get_message_handler());
243243

244-
PRECONDITION(transition_system.trans_expr.has_value());
245-
246244
transition_system.output(std::cout);
247245

248246
return 0;

src/ebmc/transition_system.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@ void transition_systemt::output(std::ostream &out) const
6060

6161
out << "Initial state constraints:\n\n";
6262

63-
::output(trans_expr->init(), out, *language, ns);
63+
::output(trans_expr.init(), out, *language, ns);
6464

6565
out << "State constraints:\n\n";
6666

67-
::output(trans_expr->invar(), out, *language, ns);
67+
::output(trans_expr.invar(), out, *language, ns);
6868

6969
out << "Transition constraints:\n\n";
7070

71-
::output(trans_expr->trans(), out, *language, ns);
71+
::output(trans_expr.trans(), out, *language, ns);
7272
}
7373

7474
int preprocess(const cmdlinet &cmdline, message_handlert &message_handler)
@@ -295,8 +295,7 @@ int get_transition_system(
295295
ns, transition_system.main_symbol->name, cmdline.get_value("reset"));
296296

297297
// true in initial state
298-
CHECK_RETURN(transition_system.trans_expr.has_value());
299-
transt new_trans_expr = *transition_system.trans_expr;
298+
transt new_trans_expr = transition_system.trans_expr;
300299
new_trans_expr.init() = and_exprt(new_trans_expr.init(), reset_constraint);
301300

302301
// and not anymore afterwards
@@ -305,7 +304,7 @@ int get_transition_system(
305304

306305
new_trans_expr.trans() =
307306
and_exprt(new_trans_expr.trans(), not_exprt(reset_next_state));
308-
*transition_system.trans_expr = new_trans_expr;
307+
transition_system.trans_expr = new_trans_expr;
309308
}
310309

311310
return -1; // done with the transition system

src/ebmc/transition_system.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Author: Daniel Kroening, [email protected]
1010
#define CPROVER_EBMC_TRANSITION_SYSTEM_H
1111

1212
#include <util/mathematical_expr.h>
13+
#include <util/std_expr.h>
1314
#include <util/symbol_table.h>
1415

1516
class cmdlinet;
@@ -18,9 +19,14 @@ class message_handlert;
1819
class transition_systemt
1920
{
2021
public:
22+
transition_systemt()
23+
: trans_expr{ID_trans, true_exprt(), true_exprt(), true_exprt(), typet()}
24+
{
25+
}
26+
2127
symbol_tablet symbol_table;
2228
const symbolt *main_symbol;
23-
optionalt<transt> trans_expr; // transition system expression
29+
transt trans_expr; // transition system expression
2430

2531
void output(std::ostream &) const;
2632
};

0 commit comments

Comments
 (0)