Skip to content

Commit 3628e23

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 2399b56 commit 3628e23

File tree

14 files changed

+79
-13
lines changed

14 files changed

+79
-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: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Author: Daniel Kroening, [email protected]
1111
#include <util/expr_util.h>
1212
#include <util/format_expr.h>
1313

14+
#include <ebmc/liveness_to_safety.h>
15+
#include <ebmc/transition_system.h>
1416
#include <solvers/bdd/miniBDD/miniBDD.h>
1517
#include <solvers/sat/satcheck.h>
1618
#include <temporal-logic/temporal_expr.h>
@@ -186,13 +188,18 @@ property_checker_resultt bdd_enginet::operator()()
186188
if(!properties.has_unknown_property())
187189
return property_checker_resultt{properties};
188190

191+
// possibly apply liveness-to-safety
192+
if(cmdline.isset("liveness-to-safety"))
193+
liveness_to_safety(transition_system, properties);
194+
189195
const auto property_map = properties.make_property_map();
190196

191197
message.status() << "Building netlist" << messaget::eom;
192198

193199
convert_trans_to_netlist(
194200
transition_system.symbol_table,
195201
transition_system.main_symbol->name,
202+
transition_system.trans_expr,
196203
property_map,
197204
netlist,
198205
message.get_message_handler());

src/ebmc/cegar/bmc_cegar.cpp

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

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

234237
convert_trans_to_netlist(
235238
symbol_table,
236239
main_module,
240+
trans,
237241
property_map,
238242
concrete_netlist,
239243
get_message_handler());

src/ebmc/ebmc_base.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ bool ebmc_baset::make_netlist(netlistt &netlist)
152152
convert_trans_to_netlist(
153153
transition_system.symbol_table,
154154
transition_system.main_symbol->name,
155+
transition_system.trans_expr,
155156
properties.make_property_map(),
156157
netlist,
157158
message.get_message_handler());

src/ebmc/ebmc_parse_options.cpp

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

239+
auto result = ebmc_base.get_properties();
240+
241+
if(result != -1)
242+
return result;
243+
244+
// possibly apply liveness-to-safety
245+
if(cmdline.isset("liveness-to-safety"))
246+
liveness_to_safety(ebmc_base.transition_system, ebmc_base.properties);
247+
239248
if(cmdline.isset("show-varmap"))
240249
{
241250
netlistt netlist;
@@ -271,15 +280,6 @@ int ebmc_parse_optionst::doit()
271280
return 0;
272281
}
273282

274-
auto result = ebmc_base.get_properties();
275-
276-
if(result != -1)
277-
return result;
278-
279-
// possibly apply liveness-to-safety
280-
if(cmdline.isset("liveness-to-safety"))
281-
liveness_to_safety(ebmc_base.transition_system, ebmc_base.properties);
282-
283283
if(cmdline.isset("smv-netlist"))
284284
{
285285
netlistt netlist;

0 commit comments

Comments
 (0)