File tree 36 files changed +479
-4
lines changed
36 files changed +479
-4
lines changed Original file line number Diff line number Diff line change
1
+ # EBMC 5.4
2
+
3
+ * word-level BMC: LTL/SVA to Buechi with --buechi
4
+
1
5
# EBMC 5.3
2
6
3
7
* SystemVerilog: fix for nets implicitly declared for port connections
Original file line number Diff line number Diff line change
1
+ CORE
2
+ FGp1.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] F G p: PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := FALSE;
6
+ next(p) := TRUE;
7
+
8
+ -- should pass
9
+ LTLSPEC F G p
Original file line number Diff line number Diff line change
1
+ CORE
2
+ Fp1.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] F p: PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := FALSE;
6
+ next(p) := TRUE;
7
+
8
+ -- should pass
9
+ LTLSPEC F p
Original file line number Diff line number Diff line change
1
+ CORE
2
+ GFp1.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] G F p: PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := FALSE;
6
+ next(p) := !p;
7
+
8
+ -- should pass
9
+ LTLSPEC G F p
Original file line number Diff line number Diff line change
1
+ CORE
2
+ Gp1.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] G p: PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := TRUE;
6
+ next(p) := TRUE;
7
+
8
+ -- should pass
9
+ LTLSPEC G p
Original file line number Diff line number Diff line change
1
+ CORE
2
+ Xp1.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] X p: PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := FALSE;
6
+ next(p) := TRUE;
7
+
8
+ -- should pass
9
+ LTLSPEC X p
Original file line number Diff line number Diff line change
1
+ CORE
2
+ and1.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] X p & X q: PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := FALSE;
6
+ next(p) := TRUE;
7
+
8
+ VAR q : boolean;
9
+
10
+ ASSIGN init(q) := FALSE;
11
+ next(q) := TRUE;
12
+
13
+ -- should pass
14
+ LTLSPEC X p & X q
15
+
Original file line number Diff line number Diff line change
1
+ CORE
2
+ and2.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] X \(p & q\): PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := FALSE;
6
+ next(p) := TRUE;
7
+
8
+ VAR q : boolean;
9
+
10
+ ASSIGN init(q) := FALSE;
11
+ next(q) := TRUE;
12
+
13
+ -- should pass
14
+ LTLSPEC X (p & q)
15
+
Original file line number Diff line number Diff line change
1
+ CORE
2
+ iff1.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] X p <-> X q: PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := TRUE;
6
+ next(p) := FALSE;
7
+
8
+ VAR q : boolean;
9
+
10
+ ASSIGN init(q) := TRUE;
11
+ next(q) := FALSE;
12
+
13
+ -- should pass
14
+ LTLSPEC X p <-> X q
Original file line number Diff line number Diff line change
1
+ CORE
2
+ iff2.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] X \(p <-> q\): PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := TRUE;
6
+ next(p) := FALSE;
7
+
8
+ VAR q : boolean;
9
+
10
+ ASSIGN init(q) := TRUE;
11
+ next(q) := FALSE;
12
+
13
+ -- should pass
14
+ LTLSPEC X (p <-> q)
Original file line number Diff line number Diff line change
1
+ CORE
2
+ implies1.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] X p -> X q: PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := TRUE;
6
+ next(p) := FALSE;
7
+
8
+ VAR q : boolean;
9
+
10
+ ASSIGN init(q) := TRUE;
11
+ next(q) := FALSE;
12
+
13
+ -- should pass
14
+ LTLSPEC X p -> X q
Original file line number Diff line number Diff line change
1
+ CORE
2
+ implies2.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] X \(p -> q\): PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := TRUE;
6
+ next(p) := FALSE;
7
+
8
+ VAR q : boolean;
9
+
10
+ ASSIGN init(q) := TRUE;
11
+ next(q) := FALSE;
12
+
13
+ -- should pass
14
+ LTLSPEC X (p -> q)
Original file line number Diff line number Diff line change
1
+ CORE
2
+ or1.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] X p \| X q: PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := FALSE;
6
+ next(p) := TRUE;
7
+
8
+ VAR q : boolean;
9
+
10
+ ASSIGN init(q) := TRUE;
11
+ next(q) := FALSE;
12
+
13
+ -- should pass
14
+ LTLSPEC X p | X q
Original file line number Diff line number Diff line change
1
+ CORE
2
+ or2.smv
3
+ --buechi --bound 2
4
+ ^\[.*\] X \(p \| q\): PROVED up to bound 2$
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^warning: ignoring
9
+ --
Original file line number Diff line number Diff line change
1
+ MODULE main
2
+
3
+ VAR p : boolean;
4
+
5
+ ASSIGN init(p) := FALSE;
6
+ next(p) := TRUE;
7
+
8
+ VAR q : boolean;
9
+
10
+ ASSIGN init(q) := TRUE;
11
+ next(q) := FALSE;
12
+
13
+ -- should pass
14
+ LTLSPEC X (p | q)
Original file line number Diff line number Diff line change 9
9
#include " bmc.h"
10
10
11
11
#include < solvers/prop/literal_expr.h>
12
+ #include < temporal-logic/ltl_to_buechi.h>
12
13
#include < trans-word-level/trans_trace_word_level.h>
13
14
#include < trans-word-level/unwind.h>
14
15
20
21
void bmc (
21
22
std::size_t bound,
22
23
bool convert_only,
24
+ bool buechi,
23
25
const transition_systemt &transition_system,
24
26
ebmc_propertiest &properties,
25
27
const ebmc_solver_factoryt &solver_factory,
@@ -46,6 +48,12 @@ void bmc(
46
48
if (property.is_disabled () || property.is_failure ())
47
49
continue ;
48
50
51
+ // LTL/SVA to Buechi?
52
+ if (buechi)
53
+ {
54
+ auto buechi = ltl_to_buechi (property.normalized_expr );
55
+ }
56
+
49
57
// Is it supported by the BMC engine?
50
58
if (!bmc_supports_property (property.normalized_expr ))
51
59
{
Original file line number Diff line number Diff line change @@ -22,6 +22,7 @@ class transition_systemt;
22
22
void bmc (
23
23
std::size_t bound,
24
24
bool convert_only,
25
+ bool buechi,
25
26
const transition_systemt &,
26
27
ebmc_propertiest &,
27
28
const ebmc_solver_factoryt &,
Original file line number Diff line number Diff line change @@ -241,7 +241,6 @@ int ebmc_parse_optionst::doit()
241
241
if (result != -1 )
242
242
return result;
243
243
244
- // possibly apply liveness-to-safety
245
244
if (cmdline.isset (" liveness-to-safety" ))
246
245
liveness_to_safety (ebmc_base.transition_system , ebmc_base.properties );
247
246
@@ -366,6 +365,7 @@ void ebmc_parse_optionst::help()
366
365
" {y--systemverilog} \t force SystemVerilog instead of Verilog\n "
367
366
" {y--reset} {uexpr} \t set up module reset\n "
368
367
" {y--liveness-to-safety} \t translate liveness properties to safety properties\n "
368
+ " {y--buechi} \t translate LTL/SVA properties to Buechi acceptance\n "
369
369
" \n "
370
370
" Methods:\n "
371
371
" {y--k-induction} \t do k-induction with k=bound\n "
Original file line number Diff line number Diff line change @@ -46,7 +46,7 @@ class ebmc_parse_optionst:public parse_options_baset
46
46
" (compute-ct)(dot-netlist)(smv-netlist)(vcd):"
47
47
" (random-traces)(trace-steps):(random-seed):(traces):"
48
48
" (random-trace)(random-waveform)"
49
- " (liveness-to-safety)"
49
+ " (liveness-to-safety)(buechi) "
50
50
" I:D:(preprocess)(systemverilog)(vl2smv-extensions)"
51
51
" (warn-implicit-nets)" ,
52
52
argc,
Original file line number Diff line number Diff line change @@ -202,7 +202,8 @@ void k_inductiont::induction_base()
202
202
203
203
bmc (
204
204
k,
205
- false ,
205
+ false , // convert_only
206
+ false , // buechi
206
207
transition_system,
207
208
properties,
208
209
solver_factory,
Original file line number Diff line number Diff line change @@ -83,6 +83,7 @@ property_checker_resultt word_level_bmc(
83
83
bmc (
84
84
bound,
85
85
convert_only,
86
+ cmdline.isset (" buechi" ),
86
87
transition_system,
87
88
properties,
88
89
solver_factory,
Original file line number Diff line number Diff line change 1
- SRC = nnf.cpp \
1
+ SRC = ltl_to_buechi.cpp \
2
+ nnf.cpp \
2
3
normalize_property.cpp \
3
4
temporal_logic.cpp \
4
5
trivial_sva.cpp \
You can’t perform that action at this time.
0 commit comments