Skip to content

Commit 4c4a572

Browse files
committed
liveness-to-safety for IC3 and BDDs
This adds support for the combination of IC3 or BDDs and the liveness-to-safety translation.
1 parent a0df895 commit 4c4a572

File tree

13 files changed

+73
-13
lines changed

13 files changed

+73
-13
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CORE
2+
failing1.sv
3+
--bdd --liveness-to-safety
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^\[main\.p0\] always s_eventually main\.my_bit: REFUTED$
7+
--
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CORE
2+
failing1.sv
3+
--ic3 --liveness-to-safety
4+
^EXIT=1$
5+
^SIGNAL=0$
6+
^property FAILED$
7+
--
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CORE
2+
failing2.sv
3+
--ic3 --liveness-to-safety
4+
^EXIT=1$
5+
^SIGNAL=0$
6+
^property FAILED$
7+
--
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CORE
2+
passing1.sv
3+
--liveness-to-safety --bdd
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^\[main\.p0\] always s_eventually main\.my_bit: PROVED$
7+
--
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
KNOWNBUG
2+
passing1.sv
3+
--liveness-to-safety --ic3
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CORE
2+
passing2.sv
3+
--ic3 --liveness-to-safety
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--

src/ebmc/bdd_engine.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Author: Daniel Kroening, [email protected]
1111
#include <util/format_expr.h>
1212

1313
#include <ebmc/ebmc_properties.h>
14+
#include <ebmc/liveness_to_safety.h>
1415
#include <ebmc/transition_system.h>
1516
#include <solvers/bdd/miniBDD/miniBDD.h>
1617
#include <solvers/sat/satcheck.h>
@@ -177,13 +178,18 @@ int bdd_enginet::operator()()
177178
properties = ebmc_propertiest::from_command_line(
178179
cmdline, transition_system, message.get_message_handler());
179180

181+
// possibly apply liveness-to-safety
182+
if(cmdline.isset("liveness-to-safety"))
183+
liveness_to_safety(transition_system, properties);
184+
180185
const auto property_map = properties.make_property_map();
181186

182187
message.status() << "Building netlist" << messaget::eom;
183188

184189
convert_trans_to_netlist(
185190
transition_system.symbol_table,
186191
transition_system.main_symbol->name,
192+
transition_system.trans_expr,
187193
property_map,
188194
netlist,
189195
message.get_message_handler());

src/ebmc/cegar/bmc_cegar.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,15 @@ void bmc_cegart::make_netlist()
230230

231231
try
232232
{
233+
const symbolt &module_symbol = ns.lookup(main_module);
234+
const transt &trans = to_trans_expr(module_symbol.value);
235+
233236
std::map<irep_idt, exprt> property_map;
234237

235238
convert_trans_to_netlist(
236239
symbol_table,
237240
main_module,
241+
trans,
238242
property_map,
239243
concrete_netlist,
240244
get_message_handler());

src/ebmc/ebmc_base.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ bool ebmc_baset::make_netlist(netlistt &netlist)
420420
convert_trans_to_netlist(
421421
transition_system.symbol_table,
422422
transition_system.main_symbol->name,
423+
transition_system.trans_expr,
423424
properties.make_property_map(),
424425
netlist,
425426
message.get_message_handler());

src/ebmc/ebmc_parse_options.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,15 @@ int ebmc_parse_optionst::doit()
241241
ebmc_baset ebmc_base(cmdline, ui_message_handler);
242242
ebmc_base.transition_system = std::move(transition_system);
243243

244+
auto result = ebmc_base.get_properties();
245+
246+
if(result != -1)
247+
return result;
248+
249+
// possibly apply liveness-to-safety
250+
if(cmdline.isset("liveness-to-safety"))
251+
liveness_to_safety(ebmc_base.transition_system, ebmc_base.properties);
252+
244253
if(cmdline.isset("show-varmap"))
245254
{
246255
netlistt netlist;
@@ -276,15 +285,6 @@ int ebmc_parse_optionst::doit()
276285
return 0;
277286
}
278287

279-
auto result = ebmc_base.get_properties();
280-
281-
if(result != -1)
282-
return result;
283-
284-
// possibly apply liveness-to-safety
285-
if(cmdline.isset("liveness-to-safety"))
286-
liveness_to_safety(ebmc_base.transition_system, ebmc_base.properties);
287-
288288
if(cmdline.isset("smv-netlist"))
289289
{
290290
netlistt netlist;

src/ic3/m1ain.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Author: Eugene Goldberg, [email protected]
1212
#include <util/ui_message.h>
1313

1414
#include <ebmc/ebmc_properties.h>
15+
#include <ebmc/liveness_to_safety.h>
1516
#include <ebmc/report_results.h>
1617

1718
#include <trans-netlist/netlist.h>
@@ -95,12 +96,17 @@ int ic3_enginet::operator()()
9596
properties = ebmc_propertiest::from_command_line(
9697
cmdline, transition_system, message.get_message_handler());
9798

99+
// possibly apply liveness-to-safety
100+
if(cmdline.isset("liveness-to-safety"))
101+
liveness_to_safety(transition_system, properties);
102+
98103
// make net-list
99104
message.status() << "Generating Netlist" << messaget::eom;
100105

101106
convert_trans_to_netlist(
102107
transition_system.symbol_table,
103108
transition_system.main_symbol->name,
109+
transition_system.trans_expr,
104110
properties.make_property_map(),
105111
netlist,
106112
message.get_message_handler());

src/trans-netlist/trans_to_netlist.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class convert_trans_to_netlistt:public messaget
5151

5252
void operator()(
5353
const irep_idt &module,
54+
const transt &,
5455
const std::map<irep_idt, exprt> &properties);
5556

5657
protected:
@@ -253,6 +254,7 @@ Function: convert_trans_to_netlistt::operator()
253254

254255
void convert_trans_to_netlistt::operator()(
255256
const irep_idt &module,
257+
const transt &trans,
256258
const std::map<irep_idt, exprt> &properties)
257259
{
258260
// setup
@@ -284,9 +286,7 @@ void convert_trans_to_netlistt::operator()(
284286
}
285287
}
286288

287-
const symbolt &module_symbol=ns.lookup(module);
288-
const transt &trans=to_trans_expr(module_symbol.value);
289-
mode = module_symbol.mode;
289+
mode = ns.lookup(module).mode;
290290

291291
// build the net-list
292292
aig_prop_constraintt aig_prop(dest, get_message_handler());
@@ -803,11 +803,12 @@ Function: convert_trans_to_netlist
803803
void convert_trans_to_netlist(
804804
symbol_table_baset &symbol_table,
805805
const irep_idt &module,
806+
const transt &trans_expr,
806807
const std::map<irep_idt, exprt> &properties,
807808
netlistt &dest,
808809
message_handlert &message_handler)
809810
{
810811
convert_trans_to_netlistt c(symbol_table, dest, message_handler);
811812

812-
c(module, properties);
813+
c(module, trans_expr, properties);
813814
}

src/trans-netlist/trans_to_netlist.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ Author: Daniel Kroening, [email protected]
1010
#define CPROVER_TRANS_NETLIST_TRANS_H
1111

1212
#include <util/expr.h>
13+
#include <util/mathematical_expr.h>
1314
#include <util/message.h>
1415
#include <util/namespace.h>
1516
#include <util/symbol_table_base.h>
1617

1718
void convert_trans_to_netlist(
1819
symbol_table_baset &,
1920
const irep_idt &module,
21+
const transt &,
2022
const std::map<irep_idt, exprt> &properties,
2123
class netlistt &dest,
2224
message_handlert &);

0 commit comments

Comments
 (0)