Skip to content

Commit 5b6552c

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 5b6552c

File tree

13 files changed

+77
-13
lines changed

13 files changed

+77
-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: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
KNOWNBUG
2+
passing1.sv
3+
--liveness-to-safety --ic3
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
--
8+
IC3 gives wrong result.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
KNOWNBUG
2+
passing2.sv
3+
--ic3 --liveness-to-safety
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
--
8+
IC3 gives wrong result.

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;

0 commit comments

Comments
 (0)